我有如下的HTML结构,需要创建一个带有所有父标签值的字符串:
细绳 : /Root/Upload/ORTHO
尽管HTML结构在这里有点奇怪:
<div id="treeview-container">
<ul class="treeview">
<li class="contains-items items-expanded">
Root
<ul style="">
<li class="contains-items">
JACK
<ul style="display: none;" class="notselected"></ul>
</li>
<li class="contains-items items-expanded">
Upload
<ul style="display: block;">
<li class="contains-items items-expanded selected">
ORTHO
<ul style="display: block;" class="notselected"></ul>
</li>
<li class="contains-items">
BEAST
<ul style="display: none;"></ul>
</li>
</ul>
</li>
<li class="contains-items items-expanded">
JANE
<ul style=""></ul>
</li>
<li class="contains-items">
MIKE
<ul style="display: none;"></ul>
</li>
</ul>
</li>
</ul>
</div>
我尝试了类似的东西:
var parentEls = $(".selected").parentsUntil( "#treeview-container")
.map(function(){
return this.textContent;
}).get().join( "/" );
您这样做的方式将无法正常工作。根据定义,该.text()
函数返回元素内的所有文本。因此,例如对于该UPLOAD
节点,它将返回UPLOAD ORTHO BEAST
(全部在同一li
元素内)而不是返回UPLOAD
。
一种解决方案是修改HTML代码并id="node_name"
为每个节点添加属性,如下所示:
<div id="treeview-container">
<ul class="treeview">
<li id="Root" class="contains-items items-expanded">
Root
<ul style="">
<li id="Jack" class="contains-items">
JACK
<ul style="display: none;" class="notselected"></ul>
</li>
<li id="Upload" class="contains-items items-expanded">
Upload
<ul style="display: block;">
<li id="ORTHO" class="contains-items items-expanded selected">
ORTHO
<ul style="display: block;" class="notselected"></ul>
</li>
<li id="BEAST" class="contains-items">
BEAST
<ul style="display: none;"></ul>
</li>
</ul>
</li>
<li id="JANE" class="contains-items items-expanded">
JANE
<ul style=""></ul>
</li>
<li id="MIKE" class="contains-items">
MIKE
<ul style="display: none;"></ul>
</li>
</ul>
</li>
并使用此代码,它将起作用:
var parentEls = $(".selected").parentsUntil( "#treeview-container")
.andSelf() //to get the current node appear in the path
.map(function(){
return $(this).attr("id");
}).get().join( "/" );
看到这个jsfiddle演示
如果您不想修改HTML代码,则可以使用javascript仅获取所选元素的文本,而忽略所有子元素的文本。只需修改之前给出的代码,替换此行:
return $(this).attr("id");
通过这个:
return $(this).clone()
.children()
.remove()
.end()
.text();
克隆所需文本的元素,然后从此克隆元素中删除所有子元素,然后返回element的文本。
希望这可以帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句