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

4 jquery css-selectors

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

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

   doSomething(this);

}
Run Code Online (Sandbox Code Playgroud)

Pao*_*ino 6

你的代码是正确的(除了遗漏,);我认为只是一个粘贴的错误),应该工作.

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

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

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

运作正常.


Chr*_*ett 1

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

$("*[title]").each(blah);
Run Code Online (Sandbox Code Playgroud)

编辑:在测试中,这将执行您想要的操作,但您实际拥有的也会执行此操作,因此它必须与您的 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>
Run Code Online (Sandbox Code Playgroud)

仅使用var title = $('[title]'); 返回了 5 个元素,它应该有。