有沒有辦法刪除範圍或片段中每個節點的ID屬性?從片段範圍內的節點中刪除所有ID屬性
更新:我終於發現,我正在努力的錯誤是基於一個< [腳本]>被包含在一個範圍內,因此意外克隆,當一個鉻用戶做一個ctrl + a。我的目標是從範圍(或doc片段)中刪除< [script]>的任何實例,以便在克隆時不復制。
有沒有辦法刪除範圍或片段中每個節點的ID屬性?從片段範圍內的節點中刪除所有ID屬性
更新:我終於發現,我正在努力的錯誤是基於一個< [腳本]>被包含在一個範圍內,因此意外克隆,當一個鉻用戶做一個ctrl + a。我的目標是從範圍(或doc片段)中刪除< [script]>的任何實例,以便在克隆時不復制。
您可以使用TreeWalker,這在幾乎所有的工作範圍中的browers工作
function actOnElementsInRange(range, func) {
function isContainedInRange(el, range) {
var elRange = range.cloneRange();
elRange.selectNode(el);
return range.compareBoundaryPoints(Range.START_TO_START, elRange) <= 0
&& range.compareBoundaryPoints(Range.END_TO_END, elRange) >= 0;
}
var rangeStartElement = range.startContainer;
if (rangeStartElement.nodeType == 3) {
rangeStartElement = rangeStartElement.parentNode;
}
var rangeEndElement = range.endContainer;
if (rangeEndElement.nodeType == 3) {
rangeEndElement = rangeEndElement.parentNode;
}
var isInRange = function(el) {
return (el === rangeStartElement || el === rangeEndElement ||
isContainedInRange(el, range))
? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;
};
var container = range.commonAncestorContainer;
if (container.nodeType != 1) {
container = container.parentNode;
}
var walker = document.createTreeWalker(document,
NodeFilter.SHOW_ELEMENT, isInRange, false);
while (walker.nextNode()) {
func(walker.currentNode);
}
}
actOnElementsInRange(range, function(el) {
el.removeAttribute("id");
});
謝謝蒂姆 - 你非常有幫助。但我不確定它的工作。我在這裏設置了一個測試頁面:http://latentmotion.com/link-building/test-clone.html – Matrym 2010-04-22 12:20:57
似乎正在爲我工作。你看到什麼是錯的?順便說一下,我剛剛更新了我的答案,以刪除我不小心遺留的日誌記錄。 – 2010-04-22 13:25:13
OP詢問DOM範圍,而不是元素。 – 2010-04-22 11:01:53
在這種情況下,沒有庫的解決方案將更可取 - 儘管我喜歡jQuery。 – Matrym 2010-04-22 11:06:21
Tim說什麼,我在標籤或問題中看不到jQuery。有些人仍然喜歡用'Plain ol'JavaScript&DOM™'編碼,你知道! – 2010-04-22 11:06:48
爲「」有什麼資格? – 2010-04-22 11:29:48