繁体   English   中英

有没有一种方法来获取jQuery选择器表达式文本?

[英]Is there a way to get jQuery selector expression text?

我有像这样的选择器数组:

var arr = [".discuss .title .post", ".post .desc" , ".eventlist .event"];

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

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

有没有一种方法可以使我在点击回调函数中获取此选择器表达式? 我看了这篇有类似问题的文章: 如何获得jQuery选择器的文本表达式?

但正如那里所说,我找不到jQuery对象的任何“选择器”属性。 我这样尝试:

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

有什么帮助吗?

正确的语法是$('.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
}

另一个选择是使用.is()$(this)与数组中的每个选择器进行比较:

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

您至少可以获取每个选定元素的类值:

$(this).attr("class");

这不能为您打算做的事情提供足够的信息吗?

我似乎没有收到任何错误,好像没有.click()事件一样, 此处为示例

但是,如果您拆分阵列并将单击附加到阵列中的每个项目,这似乎对我有用。

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

看看这里的实际操作以及停止添加两次单击的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM