我创建了一个函数,它具有树DOM的两个节点作为参数,如果第一个节点的标签与第二个节点的标签不同,则返回1,反之亦然。 这是方法:
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
,因为文字不同如何更改功能以获得我想要的功能? 作为文本的收入而不仅仅是节点的类型?
谢谢
答案 0 :(得分: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;
}
}
答案 1 :(得分: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;
}
答案 2 :(得分: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