访问没有所有子节点名称的已检查节点的名称

时间:2013-08-30 10:26:23

标签: javascript jquery jstree

我正在使用 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橡木白橡木德国橡木”。

顺便说一下,我的“隐藏”想法不起作用,因为那里写的元素很好,隐藏

1 个答案:

答案 0 :(得分:0)

我找到了解决方案:

text_arr.push($(this).find("a:first").text());

.text()的结果是一个字符串,其中包含所有匹配元素的组合文本;在这种情况下,所有文本都包含在 $(this)引用的元素的 li -tags之间,包括子节点的文本。

通过添加.find("a:first").text(),字符串中只包含第一个 a -tag之间的文字。