jQuery [attribute]选择器只返回第一个元素,而不是全部

时间:2009-07-06 19:32:32

标签: jquery css-selectors

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

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

   doSomething(this);

}

6 个答案:

答案 0 :(得分:6)

你的代码是正确的(除了遗漏的);我认为只是一个粘贴错误)并且应该有效。

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

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

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

worked properly

答案 1 :(得分:3)

我刚遇到这个问题。您是否正在使用this post中标识的旧版jquery.validate库?

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

答案 2 :(得分:2)

您需要关闭每个();

答案 3 :(得分:1)

它可能只是返回页面的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>

仅使用 var titles = $('[title]'); 返回5个元素,就像它应该有的一样。

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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