我有一个Jstree,它包含许多节点,其中一些具有相同的ID.
我想知道如何做到这一点,以便有人选择
其中一个节点,它将选择每个具有相同ID的节点.
我尝试与
onselect: function (node) {
但我不确定该怎么做,
另外我不确定如何手动选择节点
(因为这全部由selected:属性完成)
最佳答案
IDs must be unique within the document,所以我假设您需要执行此操作,因为您是从某处获取数据并需要对其进行清理.如果可以,请解决问题的根源.
但是,如果不能,则可以遍历树中的元素以查找匹配的ID.像这样的东西:
var theTargetID = /* ...whatever ID you're looking for... */;
$(theTree).find("*").each(function(element) {
if (this.id == theTargetID) {
// it matches the ID
}
});
这将创建一个可能较大的临时数组(匹配树的所有后代元素).在这里,您最好使用无聊的老式DOM遍历而不是jQuery的漂亮包装器,因为您正在尝试使用无效的文档结构(多个ID)进行操作.
这是寻找目标ID的原始DOM遍历的样子:
function traverse(theTargetID,element) {
var node;
if (element.id == theTargetID) {
// It matches,do something about it
}
// Process child nodes
for (node = element.firstChild; node; node = node.nextSibling) {
if (node.nodeType === 1) { // 1 == Element
traverse(theTargetID,node);
}
}
}
假设element参数实际上是一个DOM元素(不是jQuery对象或文本节点等).它检查元素的ID,然后在必要时递归处理其子元素.这样可以避免创建可能较大的数组.
请注意,我一直指的是树节点,而不是其中的叶子.您希望在加载树时执行一次操作,不仅要选择树中的一个节点-因为您希望尽可能简短地拥有一个无效的结构并主动对其进行修复.