Jquery 获取具有 class 的父项然后找到 div 并迭代其 div 的最佳方法
Jquery best way to get a parent with a class and then find a div and iterate its divs
我有一个按钮可以在列表中的特定 div 之后添加 div。为此,我需要找到具有特定 class 的父 div 并找到其子 div 及其 class,然后遍历其 divs 找到具有特定 css 属性的...
这里是 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 bellow/bottom 附加到带有 "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>");
}
//}
});
});
获取父子关系的方式有多种:next、find、closest、parents、children...等。在这种情况下,哪一个是最好的选择。
我认为使用 .find()
比 .siblings()
更灵活 - 在您的情况下:
$(this).closest(".rootdiv").find(".r2 .raw");
检查这是否适合您:
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/
不比较样式,只使用class(虚线),这样它可以用于过滤选择器,也可以减少另一个比较
如果您需要样式属性,可以将选择器更改为:
var div = $(this).parents(".rootdiv:first").find(".r2 .raw[style='border-bottom-style: dashed;']:first");
但是这种情况下你要小心,如果有其他样式那么这将失败。
我有一个按钮可以在列表中的特定 div 之后添加 div。为此,我需要找到具有特定 class 的父 div 并找到其子 div 及其 class,然后遍历其 divs 找到具有特定 css 属性的...
这里是 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 bellow/bottom 附加到带有 "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>");
}
//}
});
});
获取父子关系的方式有多种:next、find、closest、parents、children...等。在这种情况下,哪一个是最好的选择。
我认为使用 .find()
比 .siblings()
更灵活 - 在您的情况下:
$(this).closest(".rootdiv").find(".r2 .raw");
检查这是否适合您: 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/
不比较样式,只使用class(虚线),这样它可以用于过滤选择器,也可以减少另一个比较
如果您需要样式属性,可以将选择器更改为:
var div = $(this).parents(".rootdiv:first").find(".r2 .raw[style='border-bottom-style: dashed;']:first");
但是这种情况下你要小心,如果有其他样式那么这将失败。