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);