如果我有兩個元素:覺得有兩個DOM元素的差異使他們同
元素A:
<div id="myID">
<div id="a"></div>
<div id="b"><div id="ba"></div></div>
<div id="c"><span id="ca"></span></div>
</div>
和元素B:
<div id="myID">
<div id="a"></div>
<div id="b"><div id="ba"></div></div>
<div id="c"><span id="ca"></span></div>
<div id="d"></div>
</div>
是有可能發現Element B
比有更多的孩子,然後找到附加元素在哪裏並在Element A
中創建它?
P.S:在實際代碼中,新元素加載了Ajax Request
,但我不想用加載內容替換所有內容,我只需添加新內容並跳過現有代碼。 P.S.S:在我當前的代碼中,我有Md5校驗和以檢查新內容是否與現有的內容不一樣,但是如果新內容只有很小的變化,它將替換所有內容,這對我來說是個問題。
一塊我當前的代碼:
window.processResponse = function(data) {
// Note : "data" is Ajax responseText;
if(!data) return false;
var $data = document.createElement("div");
$data.innerHTML = data;
var em = $data.getElementsByTagName("*");
for(var i = 0; i < em.length; i++)
{
var parent = sget(em[i].id); // sget function is : document.getElementById
if(parent)
{
var html = em[i].innerHTML.replace(/(\s)+/gim, "").replace(/(\n|\r\n)+/gim, "");
var id = em[i].id;
savedPages[id] = savedPages[id] || [];
var _md5 = md5(html);
if(savedPages[id][0] == _md5) continue;
savedPages[id] = [_md5, getTime()];
parent.innerHTML = em[i].innerHTML;
}
if(em[i].tagName === "SCRIPT")
{
var code = em[i].innerHTML.replace(/(\s)+/gim, "").replace(/(\n|\r\n)+/gim, "");
var id = em[i].id;
savedPages[id] = savedPages[id] || [];
var _md5 = md5(code);
if(savedPages[id][0] == _md5) continue;
savedPages[id] = [_md5, getTime()];
try{eval(em[i].innerHTML)}catch(ex){log(ex)};
}
}
};
有幾種方法你CA做到這一點,但爲了提供最優化的一個,我們應該知道其他一些細節:1)可除只在喜歡的例子,或也該結束了孩子中間?讓孩子們總是ID?也可以說新元素的孩子少了? – ZER0 2012-07-14 11:11:02
@ ZER0你好,對於a)孩子可以處於任何位置,不完全像問題; b)是的,孩子們總是有身份證 – John 2012-07-14 11:13:30
你是否總是插入/取出孩子?或者你是否需要有時添加/刪除更深的後代? – Chris 2012-07-14 11:53:34