在事件处理程序中获取选择

时间:2011-06-24 15:11:59

标签: jquery

我用这个jQuery代码回答this question

$('input[type="checkbox"][name$="chkSelect"]').click(function() {
  $('input[type="checkbox"][name$="chkSelect"]').not(this).prop("checked", false);
});

...它让我思考:必须有办法避免在事件处理程序中复制选择器。

我尝试了$(this).selector,但只返回一个空字符串。 Here's a demo

有没有办法在事件处理程序中获取选择器文本?

4 个答案:

答案 0 :(得分:5)

$(this).selector不起作用,因为你创建了一个 new jQuery对象并传递了一个DOM元素,而不是一个选择器。

如果您只想避免重复选择器,可以事先缓存元素(无论如何都要更好):

var $elements = $('input[type="checkbox"][name$="chkSelect"]');
$elements.click(function() {
    $elements.not(this).prop("checked", false);
});

但我认为有一种方法可以将选择器放在事件处理程序中。您对所选元素的唯一引用是相应的DOM元素(通过this)。但你不能从那里“反向工程”选择器。

答案 1 :(得分:1)

你总是可以这样做:

for(var i in arr){
  $(arr[i]).bind('click', {'selector': arr[i]}, function(event){
    console.log(event.data.selector);
  });
}

答案 2 :(得分:0)

$('div').click(function() {
    alert($(this)[0].nodeName);
});

答案 3 :(得分:0)

这家伙似乎已经做到了。 How do I get a jQuery selector's expression as text? - 请参阅Pim Jager的回答

相关问题