让我假装我有以下DOM结构:
<li role="treeitem" aria-selected="false" aria-level="2" aria-labelledby="3_anchor" aria-expanded="true" id="3" class="jstree-node jstree-open">
<div unselectable="on" role="presentation" class="jstree-wholerow"> </div>
<i class="jstree-icon jstree-ocl" role="presentation"></i>
<a class="jstree-anchor" href="#" tabindex="-1" id="3_anchor">
<i class="jstree-icon jstree-themeicon" role="presentation"></i>Hombre (3)
</a>
<ul role="group" class="jstree-children">
<li role="treeitem" aria-selected="false" aria-level="3" aria-labelledby="10_anchor" id="10" class="jstree-node jstree-leaf">
<div unselectable="on" role="presentation" class="jstree-wholerow"> </div>
<i class="jstree-icon jstree-ocl" role="presentation"></i>
<a class="jstree-anchor" href="#" tabindex="-1" id="10_anchor">
<i class="jstree-icon jstree-themeicon" role="presentation"></i>Corbatas (10)
</a>
</li>
<li role="treeitem" aria-selected="false" aria-level="3" aria-labelledby="9_anchor" id="9" class="jstree-node jstree-leaf jstree-last">
<div unselectable="on" role="presentation" class="jstree-wholerow"> </div>
<i class="jstree-icon jstree-ocl" role="presentation"></i>
<a class="jstree-anchor" href="#" tabindex="-1" id="9_anchor">
<i class="jstree-icon jstree-themeicon" role="presentation"></i>Sudaderas (9)
</a>
</li>
</ul>
</li>
现在让我们说我想在最高a
项的li
元素之后插入一些内容(即a
文本Hombre (3)
})。
如果我使用
$("<i>").insertAfter('a', my_dom_element);
i
元素将插入每个a
元素中(总共3个),这是我想要阻止的。
如何强制jQuery在DOM中只搜索1级,而不是遍历所有元素?
我无法使用任何类来限制搜索,因为我不知道DOM将拥有哪些类。我正在寻找限制jQuery的DOM扫描级别
编辑:
答案 0 :(得分:3)
您可以使用属性aria-level
将li定位为值为2.然后使用直接子选择器仅定位直接锚元素:
$("<i>").insertAfter('li[aria-level="2"] > a', my_dom_element);
更新:不使用类,ID,属性等。
$("<i>").insertAfter('a:first', my_dom_element);
或
$("<i>").insertAfter('a:eq(0)', my_dom_element);
答案 1 :(得分:2)
这个怎么样:
$( "<i>" ).insertAfter( "a:first" , my_dom_element);
<强>更新强>
对于两个标签,我认为你可以这样做:
$("<i>").insertAfter('a:eq(0),a:gt(0)', my_dom_element);