我有一系列选择器,如:
var arr = [".discuss .title .post", ".post .desc" , ".eventlist .event"];
我想循环遍历此数组并在其上附加点击事件。
for(var i in arr){
$(arr[i]).click(function(){
//here I need the selector i.e. arr[i] expression - for some css work
});
}
有没有办法在click回调函数中获取这个选择器表达式? 我浏览了这篇有类似问题的帖子:How do I get a jQuery selector's expression as text?
但正如那里所说,我找不到jQuery对象的任何“selector”属性。我试过这种方式:
for(var i in arr){
$(arr[i]).click(function(){
console.log(jQuery(this).attr('selector')); //This gives undefined
});
}
任何帮助?
答案 0 :(得分:5)
正确的语法是$('.something').selector
。但是,.selector
仅在显式提供选择器字符串时有效 - 但$(this)
中没有选择器。
一种解决方法是在click
函数周围的函数中保存选择器的副本:
for (var i = 0; i < arr.length; i++) { // (Don't use "for-in loop" for arrays)
(function (selector) { // 2. a copy is saved as the argument "selector"
$(selector).click(function () {
console.log(selector);
});
}) (arr[i]); // 1. Pass in the selector
}
另一种选择是使用$(this)
将.is()
与数组中的每个选择器进行比较:
$(arr.join(',')).click(function () { // a quick way to select all selectors
var selector;
for (var i = 0; i < arr.length; i++) {
if ($(this).is(arr[i])) {
selector = arr[i];
break;
}
}
console.log(selector);
});
答案 1 :(得分:0)
您至少可以获取每个所选元素的类值:
$(this).attr("class");
这不足以提供您打算做的事情吗?
答案 2 :(得分:0)
我似乎没有收到任何错误,就好像没有.click()
事件,example here
但是,如果您拆分阵列并将点击附加到阵列中的每个项目,那么它似乎对我有效。
// Trouble is you will attach two click's to a class="post" item:
var arr = [".discuss .title .post", ".post .desc" , ".eventlist .event"];
for(var a in arr){
var ar = arr[a].split(' ');
for(var i in ar){
$(ar[i]).click(function(e){
e.preventDefault();
var href = $(this).attr('href');
var sele = $(this).attr('selector');
console.log(href);
console.log(sele);
alert("HREF: "+href+" - Selector: "+sele);
});
}
}
在行动here中查看它以及停止添加两次点击的解决方案。