0

我正在使用jstree,我想访问我的HTML中所有选中节点的 ID 和名称树中所有选中节点的 ID 和名称,以便在摘要中将它们一起呈现。

这是我的代码:

$("#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());返回所有检查节点的名称(检查父节点的名称及其所有子节点的名称) .

你有什么想法如何只返回被检查的父母的名字吗?我已经考虑将隐藏的 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 橡木白橡木德国橡木”。

顺便说一句,我用“隐藏”的想法是行不通的,因为那里写的元素是隐藏的。

4

1 回答 1

0

我找到了一个解决方案:

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

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

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

于 2013-08-30T13:15:29.180 回答