Javascript e、 target()不适用于表元素
Javascript e、 target()不适用于表元素,javascript,jquery,Javascript,Jquery,event.target函数适用于div,而不适用于table元素 html代码: <div class="one body" > sd </div> <div class="two body"> sddsd </div> <table width="100%" border="0" cellspacing="0" cellpadding="0" class="three body">jjj</t
event.target
函数适用于div,而不适用于table元素
html代码:
<div class="one body" >
sd
</div>
<div class="two body">
sddsd
</div>
<table width="100%" border="0" cellspacing="0" cellpadding="0" class="three body">jjj</table>
演示:因为实际的e.target是一个TD,而不是一个表
尽管您的表HTML元素结构不正确。表应包含
tr
和td
元素
alert("Class: "+ event.target.className );
//是第一个触发事件的元素(TD
)
//是委派给事件的元素,在本例中为
.body
这是因为您的HTML是非法的。如果你有非法的HTML,你不应该期望你的代码正常工作
文本不能是表
的直接子级。您需要一个tr
和td
或th
。浏览器会重新解释你的HTML并使其合法化。在这种情况下,它将文本置于表外:
jjj
<table width="100%" border="0" cellspacing="0" cellpadding="0" class="three body"></table>
jjj
这是来自Chrome的DOM检查器。解决方案是将文本合法地放在
表中
表
元素不能有任何文本内容,因此,您的html实际上将呈现为
<div class="one body">
sd
</div>
<div class="two body">
sddsd
</div>
jjj<table class="three body" border="0" cellpadding="0" cellspacing="0" width="100%"></table>
sd
sddsd
jjj
这就是为什么当您单击
jjj
时,事件处理程序没有启动的原因。请使用此
而不是e.target
e.target
将为您提供单击的元素,而不是事件附加到的元素。当事件附加到的元素具有子元素时,单击子元素e.target
将返回子元素
alert(this.className);
表的HTML无效。
jjj
实际上不是在表中呈现的。您需要(一个
然后)一个
最后一个
。谢谢大家的宝贵意见,我喜欢堆栈溢出哪个浏览器将文本放在td
中?Chrome将它放在表之外。@lonesomeday doh,对。我认为像浏览器一样,自动添加在这里做同样的工作。检查过了,没错。FF也是这样。我要测试的任何方式,你都只是更快;)
<div class="one body">
sd
</div>
<div class="two body">
sddsd
</div>
jjj<table class="three body" border="0" cellpadding="0" cellspacing="0" width="100%"></table>
alert(this.className);