2012-04-28 64 views
4

如果我手動寫在HTML文件中的那些下列行:避免在新行後創建textNode?

<div> 
<input type="button" value="Button 1"> 
<input type="button" value="Button 2"> 
</div> 

文本節點將針對每個新行被創建。

我想了解addEventListener方法的useCapture參數。 我選擇使用div元素的childNodes屬性來訪問DOM元素,但我將不得不忽略元素之間的textNodes。這是不是真的實用:

document.getElementsByTagName("div")[0].addEventListener("click", function(){alert(1);}, true); 

document.getElementsByTagName("div")[0].childNodes[1].addEventListener("click", function(){alert(2);}, false); 

document.getElementsByTagName("div")[0].childNodes[3].addEventListener("click", function(){alert(3);}, false); 

這裏可以看到,我不得不忽視childNodes[0]childNodes[2]以選擇我的2個輸入標籤。

有沒有辦法繞過textNode的創建,而無需將所有的HTML代碼只寫在一行上而不使用Javascript createElement

是否可以在創建textNodes時寫入HTML代碼而不必創建新行?

+0

是否有可能在'javascript'中寫入兩行代碼,如果沒有'{}''if'?不,這是語言的設計和工作原理。這裏同樣的事情。 – gdoron 2012-04-28 19:10:19

+0

@gdoron邏輯性較差 – baptx 2012-04-28 21:48:40

+0

@baptxx。含義? – gdoron 2012-04-28 21:50:05

回答

1

首先,不要重複自己!你一遍又一遍地重複同一個DOM查詢。

試試這個:

var div = document.getElementsByTagName("div")[0]; 
div.addEventListener("click", function(){alert(1);}, true); 

var buttons = div.getElementsByTagName("button"); 
buttons[0].addEventListener("click", function(){alert(2);}, false); 
buttons[1].addEventListener("click", function(){alert(2);}, false); 

呼籲getElementsByTagName拿到按鈕平凡跳過文本節點 - 問題解決了!

+0

好的,它只是3行示例,但最好放入一個變量。 我不想直接訪問按鈕,因爲我之前有其他按鈕,並且使用childNodes可以很好地訪問div的按鈕 – baptx 2012-04-28 19:20:47

+0

@baptx「childNodes」顯然不是很好,因爲你找到的原因完全不同。如果您只對元素感興趣,請_ask DOM爲您提供這些元素!_ – Alnitak 2012-04-28 19:39:20

+0

您是對的,它可能很好,但由於此textNodes它不是:/ – baptx 2012-04-28 19:53:52

1

是否有可能在創建textNodes時寫入HTML代碼而不必創建新行時?

沒有。

除非你把它發送給客戶端,這是我猜的解決方案是不是你在做什麼前後解析HTML文件...

1

對不起。唯一的可能性是使用PHP,RUBY等編程語言生成HTML代碼並添加類似這樣的內容。

<input type="button" value="Button 1"><%- 
%><input type="button" value="Button 2"> 

但我想這不是你想聽到的答案。

+0

我試着用下面的鏈接解析一些PHP行: http://docs.php.net/manual/en/domdocument.loadhtml.php If textNodes使用<%- %>將其刪除,並順序將所有內容序列化爲一行代碼。 所以我認爲我們不能在頁面請求後沒有textNodes的情況下直接在頁面源代碼中獲得一個可直接輸出的輸出(除了Firebug或任何DOM檢查器)。 – baptx 2012-04-28 20:57:11

+0

我的例子是針對模式文件中的Ruby on Rails file.html.erb – Eraden 2012-04-29 06:41:27