不是在尋找一個使用框架XXX回答無限循環的DOM
這個問題是不是爲了尋求通過框架的實用解決方案。回答使用框架XXX或這很容易在框架XXX或爲什麼不使用這個框架XXX?不回答這個問題。
我有一個函數意味着在頁面加載後運行:performShim
。此函數迭代DOM中所有span
標籤中的元素,檢查它們是否具有className
的shim
,如果是,則調用shim
傳遞給匹配元素的引用。
我的目標是前插另一個span
包含一個iframe
來傳遞給shim
的元素。
隨着我寫的代碼到目前爲止,我能夠追加到元素的父母就好了。但是,如果我註釋掉append
行,而是嘗試使用前置行,則瀏覽器會掛起大概無限循環。
我不明白爲什麼會出現這種情況。
function shim(element) {
var iframe = document.createElement('iframe');
iframe.setAttribute('frameborder', '0');
iframe.setAttribute('scrolling', 'no');
iframe.setAttribute('align', 'bottom');
iframe.setAttribute('marginheight', '0');
iframe.setAttribute('marginwidth', '0');
iframe.setAttribute('src', "javascript:'';");
var span = document.createElement('span');
span.appendChild(iframe);
//element.parentNode.insertBefore(span,element); //causes infinite loop?
element.parentNode.appendChild(span); //this line works OK
var els = element.style;
var originalVisibility = els.visibility;
var originalPosition = els.position;
var originalDisplay = els.display;
els.visibility = 'hidden';
els.position = 'absolute';
els.display = 'inline';
var width = element.offsetWidth;
var height = element.offsetHeight;
els.display = originalDisplay;
els.position = originalPosition;
els.visibility = originalVisibility;
iframe.style.width = (width-6) + 'px';
iframe.style.height = (height-6) + 'px';
}
function performShim() {
var children = document.getElementsByTagName("span");
for(var i = 0; i < children.length; i++) {
if(children[i].className == "shim") {
shim(children[i]);
}
}
}
'這個問題不是爲了找到一個實際的解決方案'然後它是在錯誤的地方。 – 2012-03-14 20:07:03
@LightnessRacesinOrbit:您忽略了* [...]通過框架*,這是一個完全有效的需求。 – 2012-03-14 20:16:28
對不起,這個問題是爲了更好地理解DOM和DOM相關的純JavaScript功能,而不是更好地理解框架如何讓你的生活更輕鬆。對給出的答案我很滿意。 – user17753 2012-03-14 20:24:18