我正在使用 jstree ,我想访问 HTML 树中所有已检查节点的ID和名称,以便在摘要中一起显示它们。< / p>
这是我的代码:
$("#summary").click(function () {
var id_arr = new Array();
var text_arr = new Array();
$("#tree").jstree('get_checked').each(function (index) {
id_arr.push($(this).attr("id"));
text_arr.push($(this).text());
});
alert("Your Selection: " + id_arr.join() + " " + text_arr.join());
});
虽然id_arr.push($(this).attr("id"));
仅返回相关已检查节点的ID(仅当检查父节点的所有子节点时,仅父节点ID),text_arr.push($(this).text());
将返回 all 已检查节点的名称(已检查的父的名称及其所有子项的名称)。
您是否有任何想法如何只返回已检查父母的姓名?
我已经考虑过将一个隐藏的HTML属性(如<li id="123"> <a title="ID:123" hidden="name of node 123">name of node 123</a></li>
)添加到我的树节点并使用 .attr(“hidden”)而不是访问 node.text()但我认为必须有更好的解决方案。
非常感谢任何帮助!
更新
树的HTML(我真正的树很广泛,但我认为这个会做):
<div id="tree">
<li id="123"> <a title="ID:123">tree</a>
<ul>
<li id="234"> <a title="ID:234">leaf tree</a>
<ul>
<li id="345"> <a title="ID:345">oak</a>
<ul>
<li id="456"> <a title="ID:456">white oak</a></li>
<li id="567"> <a title="ID:567">German oak</a></li>
</ul>
</li>
<li id="678"> <a title="ID:678">lime</a></li>
</ul>
</li>
<li id="789"> <a title="ID:789">conifer</a>
<ul>
<li id="890"> <a title="ID:890">pine</a></li>
<li id="901"> <a title="ID:901">spruce</a></li>
</ul>
</li>
</ul>
</li>
</div>
示例:选择“橡木”时,返回应该只是“345橡木”而不是“345橡木白橡木德国橡木”。
顺便说一下,我的“隐藏”想法不起作用,因为那里写的元素很好,隐藏。
答案 0 :(得分:0)
我找到了解决方案:
text_arr.push($(this).find("a:first").text());
.text()的结果是一个字符串,其中包含所有匹配元素的组合文本;在这种情况下,所有文本都包含在 $(this)引用的元素的 li -tags之间,包括子节点的文本。
通过添加.find("a:first").text()
,字符串中只包含第一个 a -tag之间的文字。