2012-04-28 69 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