【问题标题】:how to combine two selectors?如何组合两个选择器?
【发布时间】:2011-06-02 10:15:39
【问题描述】:

在我的示例http://jsfiddle.net/radek/HnXC4/2/ 中,我为点击定义了 jQuery 处理程序

  • 按钮
  • 有一个类run

通过$(":button, .run").click(function(){

为什么this button should NOT work 按钮的点击也会被触发?它没有“运行”类。

【问题讨论】:

  • 您的选择器匹配任何:button 元素,或任何具有.run 类的元素。因此,一个元素不必同时满足这两个条件,只要满足其中一个条件即可。
  • 我在发布我的问题之前尝试了$(":button .run").click(function(){。它没有用。空间很重要。
  • 小心选择简单的类 $('.something') - 在较旧、较慢的浏览器或大型文档中,这是一个非常缓慢且昂贵的操作。它扫描文档中的每一个元素!
  • 重要的不是空间。就是缺少它。该选择器选择具有.run class inside :button 元素的元素。它与您要求的不同。
  • @BoltClock:嗯,谢谢你指出这一点。我需要选择器指南。你能推荐一个吗?

标签: jquery jquery-selectors


【解决方案1】:

试试:

$(":button.run").click(function(){

$(":button, .run") 将匹配按钮或 CSS 类为 run 的任何元素。

【讨论】:

  • 更长的答案:逗号表示,因此任何要么 按钮或具有类 run 会触发。要它们,您必须连接字符串,如@Andrew 的示例中所示。
【解决方案2】:

中间不需要逗号:

$(":button.run").click(function(){};

【讨论】:

    【解决方案3】:

    你想要的是:

    $(":button.run").click(function(){});
    

    这意味着“所有按钮也有类'运行'”。当您在选择器中包含逗号时,它的意思是“所有按钮元素,以及所有具有类'run'的元素”,就像你在这里所说的那样:

    $(":button, .run").click(function(){});
    

    为了完整起见,如果选择器中有空格不带逗号,如:

    $(":button .run").click(function(){});
    

    这意味着所有具有“run”类的元素都是按钮的后代。不确定按钮可以有后代,但你明白了。

    【讨论】:

    • 嗯,<button> 元素可以有后代,但 <input type="button"> 不能有后代,因为后者是一个空元素。
    猜你喜欢
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 2020-10-09
    • 2018-05-10
    • 2013-06-26
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    相关资源
    最近更新 更多