首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >除特定子元素外,选择元素

除特定子元素外,选择元素
EN

Stack Overflow用户
提问于 2016-05-21 12:21:39
回答 5查看 2.7K关注 0票数 4

我的问题是:

我选择一个包含许多子元素的div,并想知道如何不选择某个元素,而这个元素实际上是以前选择的元素的子元素。

我已经尝试过:not(selectedElement)选择器和.not(selectedElement)选择器或api (不知道它是如何命名的)。无论如何,我还发现有人问了一个类似的问题,但没有帮助,所以我想找出问题的唯一方法就是在这里问你是否有任何方法(我知道堆栈溢出不是那样工作的,但我认真地坐了很多次,无法解决它):

HTML:

代码语言:javascript
运行
复制
<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:

代码语言:javascript
运行
复制
//non-dynamyic
$(".tablee").not($(this).find('a')).click(function() {
    $(this).next().slideToggle();
});

因此,如果单击了tablee,而不是其中的链接(在tablee元素中),那么在tablee之后的下一个元素将切换。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-05-21 12:30:00

首先,您的选择器不是选择所有的子程序,而是将单击事件附加到其中。该事件仅在实际的选择器上,并且在子事件的单击时,该事件正在传播到父节点。

.tablee上有一个单击事件,您不希望在单击其中的任何a时触发该事件。在本例中,在a上有一个单独的stopPropagation事件:-

代码语言:javascript
运行
复制
$(".tablee").click(function() {
    $(this).next().slideToggle();
});

$(".tablee a").click(function(e) {
    e.stopPropagation();
});

这样就可以停止对a的任何点击,直到.tablee

票数 5
EN

Stack Overflow用户

发布于 2016-05-21 12:29:13

从你的评论

当单击tablee元素时,我尝试切换下一个元素(在tablee之后直接出现的元素),除非没有单击这些链接。

这里有一个忽略锚的方法,

代码语言:javascript
运行
复制
$(".tablee").click(function(e) {
    if(!$(e.target).is("a")){
         $(this).next().slideToggle();
    }
});

上面的is("a")检查当前单击的目标。

为什么您的代码不起作用

代码语言:javascript
运行
复制
$(".tablee").not($(this).find('a'))

在上面的选择器中,this引用的是窗口对象,而不是.tablee元素。此外,父not()上的div将过滤带有类.tablee的元素,而不是div上的子元素。

票数 4
EN

Stack Overflow用户

发布于 2016-05-21 12:39:50

我的建议是测试目标事件元素:

代码语言:javascript
运行
复制
$('.tablee').on('click', function(e) {
     if (e.target.tagName != 'A') {
         e.preventDefault();
         $(this).next().slideToggle();
     }
 });
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37362837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档