Jan*_*nis 942 jquery jquery-selectors custom-data-attribute
我有以下场景:
var el = 'li';
Run Code Online (Sandbox Code Playgroud)
<li>页面上有5个,每个都有一个data-slide=number属性(数字分别为1,2,3,4,5).
我现在需要找到当前活动的幻灯片编号,该编号映射到var current = $('ul').data(current);每个幻灯片更改并更新.
到目前为止,我的尝试都没有成功,尝试构建与当前幻灯片匹配的选择器:
$('ul').find(el+[data-slide=+current+]);
Run Code Online (Sandbox Code Playgroud)
不匹配/返回任何东西......
我无法硬编码li部件的原因是,这是一个用户可访问的变量,如果需要可以更改为不同的元素,因此它可能并不总是一个li.
关于我缺少的任何想法?
Fré*_*idi 1401
您必须将值current注入Attribute Equals选择器:
$("ul").find(`[data-slide='${current}']`)
Run Code Online (Sandbox Code Playgroud)
对于较旧的JavaScript环境(ES5及更早版本):
$("ul").find("[data-slide='" + current + "']");
Run Code Online (Sandbox Code Playgroud)
Kev*_*eus 441
如果你不想输入所有这些,这里有一个更简单的数据属性查询方式:
$("ul[data-slide='" + current +"']");
Run Code Online (Sandbox Code Playgroud)
仅供参考:http: //james.padolsey.com/javascript/a-better-data-selector-for-jquery/
psy*_*brm 221
使用[data-x = ...]进行搜索时,请注意,它不适用于jQuery.data(..)setter:
$('<b data-x="1">' ).is('[data-x=1]') // this works
> true
$('<b>').data('x', 1).is('[data-x=1]') // this doesn't
> false
$('<b>').attr('data-x', 1).is('[data-x=1]') // this is the workaround
> true
Run Code Online (Sandbox Code Playgroud)
您可以使用此代替:
$.fn.filterByData = function(prop, val) {
return this.filter(
function() { return $(this).data(prop)==val; }
);
}
$('<b>').data('x', 1).filterByData('x', 1).length
> 1
Run Code Online (Sandbox Code Playgroud)
bPr*_*tik 37
我改进了psycho brm对jQuery 的filterByData扩展.
如果前一个扩展名在一个键值对上搜索,则使用此扩展名,您还可以搜索数据属性的存在,而不管其值如何.
(function ($) {
$.fn.filterByData = function (prop, val) {
var $self = this;
if (typeof val === 'undefined') {
return $self.filter(
function () { return typeof $(this).data(prop) !== 'undefined'; }
);
}
return $self.filter(
function () { return $(this).data(prop) == val; }
);
};
})(window.jQuery);
Run Code Online (Sandbox Code Playgroud)
用法:
$('<b>').data('x', 1).filterByData('x', 1).length // output: 1
$('<b>').data('x', 1).filterByData('x').length // output: 1
Run Code Online (Sandbox Code Playgroud)
// test data
function extractData() {
log('data-prop=val ...... ' + $('div').filterByData('prop', 'val').length);
log('data-prop .......... ' + $('div').filterByData('prop').length);
log('data-random ........ ' + $('div').filterByData('random').length);
log('data-test .......... ' + $('div').filterByData('test').length);
log('data-test=anyval ... ' + $('div').filterByData('test', 'anyval').length);
}
$(document).ready(function() {
$('#b5').data('test', 'anyval');
});
// the actual extension
(function($) {
$.fn.filterByData = function(prop, val) {
var $self = this;
if (typeof val === 'undefined') {
return $self.filter(
function() {
return typeof $(this).data(prop) !== 'undefined';
});
}
return $self.filter(
function() {
return $(this).data(prop) == val;
});
};
})(window.jQuery);
//just to quickly log
function log(txt) {
if (window.console && console.log) {
console.log(txt);
//} else {
// alert('You need a console to check the results');
}
$("#result").append(txt + "<br />");
}Run Code Online (Sandbox Code Playgroud)
#bPratik {
font-family: monospace;
}Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="bPratik">
<h2>Setup</h2>
<div id="b1" data-prop="val">Data added inline :: data-prop="val"</div>
<div id="b2" data-prop="val">Data added inline :: data-prop="val"</div>
<div id="b3" data-prop="diffval">Data added inline :: data-prop="diffval"</div>
<div id="b4" data-test="val">Data added inline :: data-test="val"</div>
<div id="b5">Data will be added via jQuery</div>
<h2>Output</h2>
<div id="result"></div>
<hr />
<button onclick="extractData()">Reveal</button>
</div>Run Code Online (Sandbox Code Playgroud)
或小提琴:http://jsfiddle.net/PTqmE/46/
小智 31
使用jQuery和data-*属性获取元素时遇到了同样的问题.
所以供您参考,最短的代码在这里:
这是我的HTML代码:
<section data-js="carousel"></section>
<section></section>
<section></section>
<section data-js="carousel"></section>
Run Code Online (Sandbox Code Playgroud)
这是我的jQuery选择器:
$('section[data-js="carousel"]');
// this will return array of the section elements which has data-js="carousel" attribute.
Run Code Online (Sandbox Code Playgroud)
rap*_*2-h 26
document.querySelectorAll(`[data-slide='${current}']`);
Run Code Online (Sandbox Code Playgroud)
我知道问题是关于JQuery,但读者可能想要一个纯JS方法.
Jom*_*aul 15
$("ul").find("li[data-slide='" + current + "']");
Run Code Online (Sandbox Code Playgroud)
我希望这可能会更好
谢谢
Mat*_*ius 13
此选择器$("ul [data-slide='" + current +"']");适用于以下结构:
<ul><li data-slide="item"></li></ul>
Run Code Online (Sandbox Code Playgroud)
虽然这$("ul[data-slide='" + current +"']");适用于:
<ul data-slide="item"><li></li></ul>
小智 11
回到他原来的问题,关于如何在不事先知道元素类型的情况下完成这项工作,以下是:
$(ContainerNode).find(el.nodeName + "[data-slide='" + current + "']");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1127426 次 |
| 最近记录: |