jQuery没有选择所有div标签

时间:2018-03-23 00:54:09

标签: javascript jquery html

当我运行此代码时,只选择了第一个div,只有第一个第二个p标签("包含" Greetings")为空,但另一个第二个p标签留在另一个两个div不受影响。我希望所有三个div都受到影响,以便所有第二个p标签("包含" Greetings")都是空的。



var e = $('div').children();
e.eq(1).empty();

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <script
  src="https://code.jquery.com/jquery-3.3.1.min.js"
  integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
  crossorigin="anonymous"></script>
    <title>jQuery Effects</title>
    <style media="screen">
      div{
        width: 200px;
        height: 200px;
        background: teal;
        float: left;
        margin: 20px;
      }
    </style>
  </head>
  <body>
    <button>Click Me</button>
    <div>
      <p>Hello</p>
      <p>Greetings</p>
      <p>Bye</p>
    </div>
    <div>
      <p>Hello</p>
      <p>Greetings</p>
      <p>Bye</p>
    </div>
    <div>
      <p>Hello</p>
      <p>Greetings</p>
      <p>Bye</p>
    </div>
    <script type="text/javascript" src="app.js"></script>
  </body>
</html>
&#13;
&#13;
&#13;

3 个答案:

答案 0 :(得分:1)

问题不在于下面的代码

var e = $('div').children();

它正在选择所有三个div和那里的孩子,所以当你做console.log(e)时,你将得到所有9个p标签(每个div 3个)。问题在于

e.eq(1)

当你这样做时,你只选择所有九个中的第二个p标签。 而不是尝试使用

p:nth-of-type(2)

这样的孩子选择器。这只会从所有div中选择第二个p标签。

var e = $('div').children('p:nth-of-type(2)');
e.empty();
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <script
  src="https://code.jquery.com/jquery-3.3.1.min.js"
  integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
  crossorigin="anonymous"></script>
    <title>jQuery Effects</title>
    <style media="screen">
      div{
        width: 200px;
        height: 200px;
        background: teal;
        float: left;
        margin: 20px;
      }
    </style>
  </head>
  <body>
    <button>Click Me</button>
    <div>
      <p>Hello</p>
      <p>Greetings</p>
      <p>Bye</p>
    </div>
    <div>
      <p>Hello</p>
      <p>Greetings</p>
      <p>Bye</p>
    </div>
    <div>
      <p>Hello</p>
      <p>Greetings</p>
      <p>Bye</p>
    </div>
    <script type="text/javascript" src="app.js"></script>
  </body>
</html>

希望这有帮助!

答案 1 :(得分:0)

@Xufox的评论是一个非常好的简短解决方案(使用$('div > p:nth-child(2)').empty();链接到底部的nth),但如果你想要更详细的一个:

选择每个p的第二个div并清空它,

您可以遍历div并使用nth选择第二个p

试试这个:

$('div').each(function(ndx,elem){
    $(elem).children('p:nth(1)').empty();
});

小提琴:https://jsfiddle.net/5xt0makw/9/

  

:nth-​​child(n)选择器匹配第n个元素   孩子,无论其类型如何,都是其父母。

第n个选择器:https://www.w3schools.com/cssref/sel_nth-child.asp

  

.each函数可用于无缝迭代两个对象和   阵列。

jQuery .eachhttp://api.jquery.com/jquery.each/

我希望这会有所帮助。

答案 2 :(得分:0)

做一个&#34;每个&#34;是不是更好?并获得所有的价值,以更好地工作? E.g:

$("div").each((a, b) => {
  console.log(a, b);
});