2013-02-01 65 views
2

我對動態創建的層次元素有點問題。
一直試圖使用insertBefore所以他們改變的地方,但沒有運氣,不會得到任何錯誤,但我仍然得到其他元素。AppendChild和InsertBefore

我有這個功能,創建一個類dice-window-wrapper廣告它page-content-wrapper

var outerDiv = createElementWithClass('div', 'dice-window-wrapper'), 
innerDiv = createElementWithClass('div', 'dice-menubar-wrapper'); 
outerDiv.appendChild(innerDiv); 
document.getElementById("page-content-wrapper").appendChild(outerDiv); 

而且我在這裏得到了打印<div class="dice-window-wrapper">...</div>
沒問題。

然後我想廣告與一些<li>標籤的無序列表,並使用此功能:

icon_ul = createElementWithOutClass('ul'); 
var icon_ul = document.getElementById("page-menu-wrapper").appendChild(icon_ul); 

icon_li = createElementWithId('li','icon-dice'); 
icon_ul.appendChild(icon_li); 
document.getElementById("ul"); 

和打印將<ul><li id="icon-dice"></li></ul>

的問題,因爲我告訴是<div class="dice-window-wrapper">...</div>應當根據字符串<ul><li id="icon-dice"></li></ul>

但即使我將icon_ul函數從appendChild更改爲insertBefore,似乎沒有任何變化。

+0

爲什麼說你的'insertBefore'的代碼是什麼樣子?它期望兩個參數:新的子元素和應插入新元素之前的元素:https://developer.mozilla.org/en-US/docs/DOM/Node.insertBefore。 –

+0

我很困惑。你的第一個模塊在'page-content-wrapper'中增加了兩個嵌套的'div',你的第二個模塊在'page-menu-wrapper'中增加了一個'ul',所以看起來你的兩個模塊「單獨」工作,第一個'div'與第二個'ul'沒有一定的關係? – Passerby

+0

@FelixKling 這就是我試圖用 document.getElementById(「page-menu-wrapper」)。insertBefore(icon_ul,outerDiv); – Dymond

回答

1

試試這個:

document.getElementById("page-menu-wrapper").insertBefore(icon_ul, outerDiv); 

insertBefore需要2個參數:添加什麼,你想要什麼之前,添加它。

documentation here

var insertedElement = parentElement.insertBefore(newElement, referenceElement); 
// ^returns   ^add to this element: ^this new element,^before this existing element. 

好了,所以這裏的問題是,假設:

document.getElementById("page-menu-wrapper").insertBefore(icon_ul, outerDiv); 

在那裏,outerDiv父不"page-menu-wrapper"。要麼替換該行:

document.getElementById("page-content-wrapper").insertBefore(icon_ul, outerDiv); 

或更換:

document.getElementById("page-content-wrapper").appendChild(outerDiv); 
// With 
document.getElementById("page-menu-wrapper").appendChild(outerDiv); 
+0

嘿,正是我所嘗試的,但是icon_ul,outerDiv在控制檯中沒有任何改變。也沒有錯誤。 仍然在骰子窗口包裝下獲得UI元素 – Dymond

+2

您是否在與創建'outerDiv'的範圍相同的範圍內調用'instertBefore'?換句話說,你確定'outerDiv'不是'null'還是'undefined'?如果'instertBefore'收到'null'或'undefined'作爲'referenceElement',它就像一個'appendChild'。 – Cerbrus

+0

(爲了避免氾濫OP的收件箱)請注意'#page-menu-wrapper'內沒有'outerDiv',所以我不確定你的舊代碼是否工作,但這似乎也是OP面臨的錯誤[在他注意之前](http://stackoverflow.com/questions/14643123/appendchild-and-insertbefore#comment20458937_14643123)。 – Passerby