假设我有4个带有类的div元素.navlink,当点击它时,用于.data()设置一个名为的键'selected',值为true:
$('.navlink')click(function() { $(this).data('selected', true); })
Run Code Online (Sandbox Code Playgroud)
每次.navlink点击一个新的,我想存储以前选择的navlink以供稍后操作.是否有一种快速简便的方法可以根据存储的内容选择元素.data()?
似乎没有任何jQuery :过滤器适合该法案,我尝试了以下(在同一点击事件中),但由于某种原因它不起作用:
var $previous = $('.navlink').filter(
function() { $(this).data("selected") == true }
);
Run Code Online (Sandbox Code Playgroud)
我知道还有其他方法可以实现这一目标,但是现在我只是好奇,如果它可以通过.data().
Bar*_*cat 183
你的过滤器可以工作,但你需要在传递给过滤器的函数中匹配对象时返回true,以便抓取它们.
var $previous = $('.navlink').filter(function() {
return $(this).data("selected") == true
});
Run Code Online (Sandbox Code Playgroud)
Ste*_*noP 134
只是为了记录,你可以使用jquery过滤数据(这个问题已经过时了,jQuery从此开始发展,所以编写这个解决方案也是正确的):
$('.navlink[data-selected="true"]');
Run Code Online (Sandbox Code Playgroud)
或者,更好(表现):
$('.navlink').filter('[data-selected="true"]');
Run Code Online (Sandbox Code Playgroud)
或者,如果你想获得data-selectedset的所有元素:
$('[data-selected]')
Run Code Online (Sandbox Code Playgroud)
请注意,此方法仅适用于通过html-attributes设置的数据.如果使用该.data()调用设置或更改数据,则此方法将不再有效.
mpe*_*pen 13
我们可以很容易地创建一个插件:
$.fn.filterData = function(key, value) {
return this.filter(function() {
return $(this).data(key) == value;
});
};
Run Code Online (Sandbox Code Playgroud)
用法(检查单选按钮):
$('input[name=location_id]').filterData('my-data','data-val').prop('checked',true);
Run Code Online (Sandbox Code Playgroud)
我注意到的两件事(虽然你写下来时可能会出错).
$('.navlink').click)return $(this).data("selected")==true)