在Jquery中的任何级别中查找元素类型的第一级子级
Finding first level child of a element type in any level in Jquery
我试图在任何深度中找到元素的第一级子级。
例如,我有一个fieldset
元素,它有一些子元素,包括其他字段集元素;我只想找到那些在第一个字段集中的元素,而不是在第二个字段集中。
换句话说,我想要父字段集的所有子项,但不想要任何嵌套字段集的子项。
给定此HTML:
<fieldset id='root'>
<div>
<div>
<span>Test1</span>
<span>Test2</span>
</div>
<span>Test3</span>
</div>
<fieldset>
<div>
<span>Test4</span>
<span>Test5</span>
<span>Test6</span>
</div>
</fieldset>
</fieldset>
我做$("#root").find("span")
,它找到所有跨度,但我只想找到Test1
、Test2
、Test3
如何在jQuery中做到这一点?
我建议:
// select the elements you want to find,
// use filter() to filter out the elements you don't want:
$('span').filter(function() {
// if the closest ancestor <fieldset> element to
// the <span> you're looking for has the id of 'root'
// this evaluates to true (is() returns a Boolean);
// if the evaluation is true the current element is retained
// in the collection, if false it's discarded:
return $(this).closest('fieldset').is('#root');
// using css() to style the retained elements for verification:
}).css('color', 'red');
$('span').filter(function() {
return $(this).closest('fieldset').is('#root');
}).css('color', 'red');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form action="#" method="post">
<fieldset id='root'>
<div>
<div>
<span>Test1</span>
<span>Test2</span>
</div>
<span>Test3</span>
</div>
<fieldset>
<div>
<span>Test4</span>
<span>Test5</span>
<span>Test6</span>
</div>
</fieldset>
</fieldset>
</form>
参考文献:
closest()
css()
filter()
is()
您可以使用jQuery的filter()
和parents()
函数来完成此操作。
你可以看看我的小提琴。
http://jsfiddle.net/ebilgin/9ov9kaaL/
编辑:未来使用的代码:
$("#root").find("span").filter( function () {
if ( $(this).parents("fieldset").length ) {
if ( $(this).parents("fieldset").parents("fieldset").length ) {
return false;
}
return true;
}
}).css("color", "#CCC");
这些选择器中的任何一个都可以使用现有的HTML:
//selects spans of #root's first child:
$('#root > *:first span');
//selects spans of #root's children that aren't fieldsets:
$('#root > :not(fieldset) span').css('background', 'yellow');
如果fieldset
是第二个或第一个子级,则第二个将起作用。
代码段:
$('#root > *:first span').css('color', 'red');
$('#root > :not(fieldset) span').css('background', 'yellow');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<fieldset id='root'>
<div>
<div>
<span>Test1</span>
<span>Test2</span>
</div>
<span>Test3</span>
</div>
<fieldset>
<div>
<span>Test4</span>
<span>Test5</span>
<span>Test6</span>
</div>
</fieldset>
</fieldset>
您可以在代码中使用css伪类:not和css类来过滤该div:
HTML
<fieldset id='root'>
<div>
<div>
<span>Test1</span>
<span>Test2</span>
</div>
<span>Test3</span>
</div>
<fieldset>
<div class="filter">
<span>Test4</span>
<span>Test5</span>
<span>Test6</span>
</div>
</fieldset>
jQuery
$("#root div:not(.filter) span").css("color","red");
你可以在这里测试:
http://jsfiddle.net/w6k2z9r4/1/
var children = $('#root').children('div').children('span').css("background-color", "red" );
请参阅此jsbin:http://jsbin.com/yubafe/edit?html,js,控制台,输出
相关文章:
- CKEditor Widget-阻止编辑可编辑元素本身
- 如何设置html元素填充的动画
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 使用clickToggle并在单击另一个元素时关闭元素
- 单击时将焦点更改为元素
- 表追加而不附加最后一个元素
- 如何在jQuery中获取元素的形式
- 我可以获得相对于被点击元素的确切点击位置吗
- 在函数中添加数组元素的数值
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 将视口底部滚动到元素底部
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 如何使用jquery处理php循环通过元素
- Ckeditor-plugin:插入虚假元素add不情愿<p>标签前后
- JQuery添加元素需要在我的js之前再次添加JQuery脚本
- 在Jquery detachment()和appendTo()之后定位元素
- 在动态创建的元素上获取对特定选择器的引用
- 如何按字母顺序排列JSON元素使用localeCompare()向下一级