我的问题是:
我选择一个包含许多子元素的div,并想知道如何不选择某个元素,而这个元素实际上是以前选择的元素的子元素。
我已经尝试过:not(selectedElement)
选择器和.not(selectedElement)
选择器或api (不知道它是如何命名的)。无论如何,我还发现有人问了一个类似的问题,但没有帮助,所以我想找出问题的唯一方法就是在这里问你是否有任何方法(我知道堆栈溢出不是那样工作的,但我认真地坐了很多次,无法解决它):
HTML:
<div class="tablee" style="cursor:/*pointer*/;">
<table>
<tbody>
<tr>
<td>
<a href="something.php">
<img src="1.jpg">
</a>
</td>
<td class="postcontent">
<p class="postusername">
<a class="poster" href="something.php">momo</a>
<br>
some other text
</p>
</td>
<td>
<imgsrc="1.jpg">
</td>
</tr>
</tbody>
</table>
</div>
jQuery:
//non-dynamyic
$(".tablee").not($(this).find('a')).click(function() {
$(this).next().slideToggle();
});
因此,如果单击了tablee
,而不是其中的链接(在tablee
元素中),那么在tablee
之后的下一个元素将切换。
发布于 2016-05-21 04:30:00
首先,您的选择器不是选择所有的子程序,而是将单击事件附加到其中。该事件仅在实际的选择器上,并且在子事件的单击时,该事件正在传播到父节点。
.tablee
上有一个单击事件,您不希望在单击其中的任何a
时触发该事件。在本例中,在a
上有一个单独的stopPropagation
事件:-
$(".tablee").click(function() {
$(this).next().slideToggle();
});
$(".tablee a").click(function(e) {
e.stopPropagation();
});
这样就可以停止对a
的任何点击,直到.tablee
。
发布于 2016-05-21 04:29:13
从你的评论
当单击tablee元素时,我尝试切换下一个元素(在tablee之后直接出现的元素),除非没有单击这些链接。
这里有一个忽略锚的方法,
$(".tablee").click(function(e) {
if(!$(e.target).is("a")){
$(this).next().slideToggle();
}
});
上面的is("a")
检查当前单击的目标。
为什么您的代码不起作用
$(".tablee").not($(this).find('a'))
在上面的选择器中,this
引用的是窗口对象,而不是.tablee
元素。此外,父not()
上的div
将过滤带有类.tablee
的元素,而不是div
上的子元素。
发布于 2016-05-21 04:39:50
我的建议是测试目标事件元素:
$('.tablee').on('click', function(e) {
if (e.target.tagName != 'A') {
e.preventDefault();
$(this).next().slideToggle();
}
});
https://stackoverflow.com/questions/37362837
复制