2012-04-28 2 views
4

Если я вручную писать эти следующие строки в HTML-файле:Избегайте создания textNode после новой строки?

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

Текстовый узел будет создан для каждой новой строки.

Я хотел понять аргумент useCapture метода addEventListener. Я выбрал доступ к элементам DOM, используя свойство childNodes моего элемента div, но мне придется игнорировать 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 входных меток.

Есть ли способ обойти создание текстовых образов без написания всего HTML-кода только на одной строке и без использования Javascript createElement?

Возможно ли написать код HTML без создания textNodes при переходе на новую строку?

+0

Возможно ли в javascript написать две строки кода внутри 'if' без' {} '? Нет, так язык был разработан и работает. такой же предмет здесь. – gdoron

+0

@gdoron менее логичный – baptx

+0

@baptxx. Имея в виду? – gdoron

ответ

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

+0

@baptx 'childNodes' явно не подходит, точно по той причине, что вы нашли. Если вас интересуют только элементы, _ask DOM, чтобы предоставить вам эти элементы! _ – Alnitak

+0

Вы правы, это может быть приятно, но из-за этого textNodes это не так:/ – baptx

1

Возможно ли написать код HTML без создания textNodes при переходе на новую строку?

Nope.

Если вы не разобрать файл HTML перед его отправкой клиенту, который я предполагаю, что решение не то, что вы после ...

1

К сожалению. Только возможность генерации HTML-кода с использованием языка программирования, такого как PHP, RUBY, и добавить что-то вроде этого.

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

Но я думаю, что это не ответ, который вы хотите услышать.

+0

Я пробовал разбор некоторых строк с PHP по следующей ссылке: http://docs.php.net/manual/en/domdocument.loadhtml.php Если textNodes удаляются с помощью <%- %> с сериализацией всего в одну строку кода. Таким образом, я думаю, что мы не можем получить вывод, который можно прочитать человеком непосредственно в источнике страницы (кроме Firebug или любого инспектора DOM) без наличия текстовых имен после запроса страницы. – baptx

+0

Мой пример для Ruby on Rails в схеме file.html.erb – Eraden

Смежные вопросы