2015-10-26 52 views
0

我創建了一個函數,它具有樹DOM的兩個節點作爲參數,並且如果第一個節點的標記與第二個節點的標記不同,則返回1,反之亦然0 。 這裏是方法:比較DOM樹中兩個節點文本的函數

function foo(node1, node2) { 
    if(node1.nodeName !== node2.nodeName) { 
     return 1; 
    } 
    return 0; 
} 

這是爲我好,如果作爲參數傳遞的結點是具有不同標記(例如,P和I,#text和U,等)的節點。但是,如果節點是相等的並且是兩個文本(#text),我想不僅比較節點類型,而且還比較內容(本例中爲兩個文本)。所以如果文本不同,做一定的操作,如果它們相等。

在我的應用程序中,我知道文本節點總是在樹DOM的樹葉中找到。

例如,如果我有這兩個DOM樹:

 P 
    / | \ 
some B A 
     | | 
     text here 


     P 
    /  \ 
other  U 
     / \ 
      TT I 
      |  | 
    beautiful text 

和我打電話用2個參數(第一節點處於所述第一樹,在第二樹中的第二節點)的函數:

  • foo(P, some) =>return 1
  • foo(some, some) =>return 0
  • foo(some, beautiful) =>return 1因爲文字是不同的
  • 等...

我怎樣才能改變我的函數來得到我想要的東西? 作爲文本的收入而不僅僅是節點的類型?

謝謝

回答

1

這應該這樣做。

function foo(node1, node2) { 
    if(node1.nodeName !== node2.nodeName) { 
     return 1; 
    } 
    else if (node1.nodeName === "#text"){ 
     if (node1.nodeValue !== node2.nodeValue) { 
     return 1; 
     } 
     return 0; 
    } 
} 
0

我會做這樣的事情:

function foo(node1, node2) { 
    if(node1.nodeName !== node2.nodeName) { 
     return 1; 
    }else if (node1.nodeName === 'P' && node1.textContent === node2.textContent){ 
     return 0  
    } 
    return 1; 
} 
0

有,做幾乎是一個DOM方法:isEqualNode(見MDN)。

function foo(node1, node2) { 
    if(node1.isEqualNode(node2)) { 
     return 0; 
    } 
    return 1; 
} 

實例:

var a = document.createElement('div'); 
var b = document.createElement('div'); 
a.textContent = 'foo'; 
b.textContent = 'foo'; 
foo(a, b); // 0 

var a = document.createElement('div'); 
var b = document.createElement('div'); 
a.textContent = 'foo'; 
b.textContent = 'bar'; 
foo(a, b); // 1 

var a = document.createElement('p'); 
var b = document.createElement('div'); 
foo(a, b); // 1