【问题标题】:jQuery [attribute] selector only returning first element, not alljQuery [attribute] 选择器只返回第一个元素,而不是全部
【发布时间】:2016-06-06 06:46:46
【问题描述】:

我正在尝试将样式应用于具有标题属性的所有元素。由于某种原因,此代码仅返回第一个,而不是全部。我可能遗漏了一些明显的东西......任何帮助都会很棒,谢谢!

$("[title]").each(function() {

   doSomething(this);

}

【问题讨论】:

  • 你在 doSomething(this) 函数中做了什么?
  • 这个选择器对我来说很好用!事实上,在 StackOverflow 上,它返回 66 个元素。在地址栏中试试这个:javascript:alert($("[title]").length);

标签: jquery css-selectors


【解决方案1】:

您的代码是正确的(除了缺少的 ); 我认为这只是一个粘贴错误)并且应该可以工作。

它不起作用的唯一原因是如果您没有将代码包裹在 $(document).ready 周围。如果你不熟悉 $(document).ready ,这是 jQuery 的一个特殊事件,它会在整个 DOM 结构准备好被操作时立即触发。如果您的页面顶部有 Javascript,那么您在 $(document).ready 之外运行的任何内容都将针对空 DOM,因为浏览器还没有时间创建节点。因此,无论何时您想要操作元素(尤其是查询以获取 所有 具有标题的元素),您肯定需要将代码放在这个特殊事件周围。

记住这一点,我尝试了以下代码,它会在带有标题的元素周围放置一个红色边框:

$(document).ready(function() {
    $("[title]").each(function() {
        $(this).css('border','1px solid red');
    });
});

还有worked properly

【讨论】:

    【解决方案2】:

    我刚刚遇到了这个问题。会不会是您使用的是旧版本的 jquery.validate 库,如 this post 中标识的那样?

    对我来说,下载和应用latest version of the plugin 工作

    【讨论】:

      【解决方案3】:

      你需要关闭你的 each();

      【讨论】:

      • 这是对的,但如果他真的这样,代码甚至都不会运行......(他只得到第一场比赛)
      【解决方案4】:

      它可能只是返回页面的 TITLE 元素。试试:

      $("*[title]").each(blah);
      

      编辑:在测试时,这会做你想做的事,但你实际拥有的也会如此,所以它必须与你的 HTML 相关。作为参考,这是我使用的:

      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
                          "http://www.w3.org/TR/html4/loose.dtd">
      <html>
      <head>
      <title>Blah</title>
        <script src="http://code.jquery.com/jquery-latest.js"></script>
      
      
        <script>
        $(document).ready(function(){
          var titles = $('*[title]');
              alert(titles.length);
        });
        </script>
      </head>
      <body>
        <a title="blah" href="#">blah</a>
          <a title="blah" href="#">blah</a>
          <a title="blah" href="#">blah</a>
          <a title="blah" href="#">blah</a>
          <a title="blah" href="#">blah</a>
      </body>
      </html>
      

      仅使用 vartitles = $('[title]'); 返回 5 个元素,这是应该的。

      【讨论】:

        【解决方案5】:

        如果选择器发生奇怪的事情,首先尝试的一个很好的提示是检查渲染的标记实际上是否可以在w3c 进行验证。如果没有有效的 dom,您可能会从任何 dom 脚本和选择器中得到奇怪而奇妙的东西。

        【讨论】:

          【解决方案6】:

          当您尝试在浏览器控制台中使用 jQuery 并且该页面上未安装 jQuery 时,可能会发生这种情况。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-10-29
            • 1970-01-01
            • 2017-11-29
            • 2011-09-30
            • 2022-10-02
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多