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

时间:2011-03-09 13:31:56

标签: javascript jquery

我有一系列选择器,如:

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
   });
}

任何帮助?

3 个答案:

答案 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中查看它以及停止添加两次点击的解决方案。