[英]Jquery: Count node separation in xml
我正在使用JavaScript(Jquery $.ajax
)加載xml文檔。
我需要能夠計算將2個文本節點分隔開的分支數(b)。
例如
<b n="Archaea">
<s>Archaea</s>
<b n="Eubacteria">
<s>Cyanobacteria</s>
<s>Spirochaete</s>
<b n="Seaweeds">
<s>Red rags</s>
<s>Calliblepharis</s>
</b>
</b>
<b n="Land plants">
<s>Liverwort</s>
<s>Moss</s>
<s>Bracken fern</s>
<b n="Seed plants">
<s>Scots pine</s>
<s>Ginko</s>
<s>Welwitschia</s>
</b>
</b>
</b>
因此,例如,“蘇格蘭松樹”與“ Calliblepharis”相距多少個分支。 在這種情況下,答案將是4(種子植物>陸地植物>古細菌>真細菌>海藻)。
我還需要計算兩個元素之間的“最接近的共同祖先”。 例如,在“蘇格蘭松樹”和“銀杏”之間將是“蕨菜蕨”(因為蕨菜蕨是最接近包含“蘇格蘭松樹”和“銀杏”的分支的物種)。 我真的不確定當兩個元素在不同分支中彼此距離很遠時,這將如何工作。
抱歉,如果我在這里使用錯誤的語言。 希望有道理。
抱歉,回復晚了。
我已經在jsbin上設置了一個演示
希望這是可以自我解釋的,但是如果不問我的話。
對於xhr位,您需要在與頁面相同的目錄中具有file.xml
。
這是獲取分支之間距離的主要功能
function elementDistance(elem1, elem2) {
var steps = 0;
//the parent elements are the branches
var first = elem1.parentElement;
var second = elem2.parentElement;
//if the elements are at different depths you need to even them up
//and count each time as a step
if (elem1.depth() > elem2.depth()) {
while (first.depth() > second.depth()) {
first = first.parentElement;
steps++;
}
}
else if (elem1.depth() < elem2.depth()) {
while (first.depth() < second.depth()) {
second = second.parentElement;
steps++;
}
}
while (first !== second) {
steps += 2;
first = first.parentElement;
second = second.parentElement;
}
return steps;
}
PS演示無法在Firefox或IE瀏覽器
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.