【问题标题】:Jquery best way to get a parent with a class and then find a div and iterate its divsJquery 获取具有类的父级然后找到一个 div 并迭代其 div 的最佳方法
【发布时间】:2015-03-10 11:10:27
【问题描述】:

我有一个按钮,可以在列表中的特定 div 之后添加一个 div。为此,我需要找到具有特定类的父 div 并找到具有其类的子 div,然后遍历其 div 以找到具有特定 css 属性的 div...

这里是html结构:

<div class="popup1">
 <div class="rootdiv">
  <div class="r1">content</div>
  <div class="r2">
    <div class="raw">raw-content...</div>
    <div class="raw" style="border-bottom-style: dashed;">raw-content...</div>
    <!-- need to append here (bellow that div with a dashed border -->
    <div class="raw">raw-content...</div>
  </div>
  <div class="r3">
    <input type="button" class="btn" onclick="forExMyJqueryFunc()"></input>
  </div>
 </div>
</div>
<div class="popup2">
 <div class="rootdiv">
  <div class="r1">content</div>
  <div class="r2">
    <div class="raw">raw-content...</div>
    <div class="raw" style="border-bottom-style: dashed;">raw-content...</div>
    <div class="raw">raw-content...</div>
  </div>
  <div class="r3">
    <inpute type="button" class="btn" onclick="forExMyJqueryFunc()"></input>
  </div>
 </div>
</div>

所以我正在编写一个脚本,将 div 波纹管/底部附加到带有“border-bottom-style: dashed”的 div。

$(function forExMyJqueryFunc() {
        $(".btn").on('click', function() {

            var divRaws = $(this).closest(".rootdiv").siblings(".r2 .raw");
            //divRaws.foreach(item) { 
                if (item.css('border-bottom-style') === "dashed") {
                   item.after("<div class="raw">raw-new-content...</div>");
                }
            //}
        });
    });

有不同的方法来获取父母和孩子:下一个,查找,最近的,父母,孩子...等。在这种情况下,哪一个是最佳选择。

【问题讨论】:

  • &lt;inpute type="button" ???这只是一个错字吗?
  • @A.沃尔夫 是的,当然。您可以将其替换为
  • 您不是在寻找 siblingsrootdiv .. 它没有兄弟姐妹。阅读 jQuery API 中各种遍历的定义
  • .next 不会找到父或子,它会找到下一个 sibling... 即 dom 中同一级别的下一个元素。这就是你的代码有问题,siblings 找不到孩子:api.jquery.com/siblings

标签: jquery html find children parents


【解决方案1】:

检查这是否适合您: JS:

$(function () {
    $(".btn").on('click', function () {
        var div = $(this).parents(".rootdiv:first").find(".r2 .raw.dashed:first");
        div.after("<div class='raw'>raw-new-content...</div>");
    });
});

HTML:

<div class="popup1">
    <div class="rootdiv">
        <div class="r1">content</div>
        <div class="r2">
            <div class="raw">raw-content...</div>
            <div class="raw dashed">raw-content...</div>
            <!-- need to append here (bellow that div with a dashed border -->
            <div class="raw">raw-content...</div>
        </div>
        <div class="r3">
            <input type="button" class="btn"></input>
        </div>
    </div>
</div>
<div class="popup2">
    <div class="rootdiv">
        <div class="r1">content</div>
        <div class="r2">
            <div class="raw">raw-content...</div>
            <div class="raw dashed">raw-content...</div>
            <div class="raw">raw-content...</div>
        </div>
        <div class="r3">
            <inpute type="button" class="btn" onclick="forExMyJqueryFunc()">
                </input>
        </div>
    </div>
</div>

CSS:

.dashed {
    border:2px dashed black;
}

演示:http://jsfiddle.net/lotusgodkk/GCu2D/612/

不用比较样式,只需使用一个类(虚线),这样它就可以用于过滤选择器并减少另一个比较

如果您需要样式属性,可以将选择器更改为:

 var div = $(this).parents(".rootdiv:first").find(".r2 .raw[style='border-bottom-style: dashed;']:first");

但在这种情况下你必须小心,如果有其他样式,那么这将失败。

【讨论】:

  • @K K 谢谢!但是添加另一个类对我来说是额外的代码,因为这是所有代码的一小部分。所以在我的情况下,添加“虚线”类可能不是最好的选择。理想情况下,如果我还可以通过设置 css 属性来找到 div 来获取 div,那就太好了,如下所示:var div = $(this).parents(".rootdiv:first").find(".r2 .raw[border-bottom-style=dashed]"); 我可以用属性来做到这一点,但我可以用这样的 css 属性来做到这一点吗?
  • 是的,有可能,在答案末尾查看更新
  • @K K 谢谢!你真的帮了我!
【解决方案2】:

我认为使用.find() 比使用.siblings() 更灵活——在你的情况下:

$(this).closest(".rootdiv").find(".r2 .raw");

【讨论】:

  • 实际上它不会更灵活,这将是正确的选择 - siblings 不会找到 .raw 因为它只看起来与 .rootdiv 相同的级别所以在这种情况下rootdiv 没有任何兄弟姐妹
猜你喜欢
  • 2010-10-26
  • 2014-04-24
  • 2015-08-30
  • 2015-12-13
  • 2012-08-05
  • 2014-09-02
  • 1970-01-01
  • 2016-07-11
  • 2011-06-05
相关资源
最近更新 更多