有没有办法获取jQuery选择器表达式文本?

Swa*_*war 2 javascript jquery

我有一系列选择器,如:

var arr = [".discuss .title .post", ".post .desc" , ".eventlist .event"];
Run Code Online (Sandbox Code Playgroud)

我想遍历这个数组并在其上附加一个click事件.

for(var i in arr){
   $(arr[i]).click(function(){
      //here I need the selector i.e. arr[i] expression - for some css work
   });
}
Run Code Online (Sandbox Code Playgroud)

有没有办法在单击回调函数中获取此选择器表达式?我经历了这个有类似问题的帖子:如何将jQuery选择器的表达式作为文本?

但正如那里所说,我找不到jQuery对象的任何"selector"属性.我试过这种方式:

for(var i in arr){
   $(arr[i]).click(function(){
      console.log(jQuery(this).attr('selector')); //This gives undefined
   });
}
Run Code Online (Sandbox Code Playgroud)

有帮助吗?

Dav*_*ang 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
}
Run Code Online (Sandbox Code Playgroud)

另一种选择是$(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);
});
Run Code Online (Sandbox Code Playgroud)