首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在纯JavaScript中使用jQuery方法'not()‘?

如何在纯JavaScript中使用jQuery方法'not()‘?
EN

Stack Overflow用户
提问于 2013-12-09 15:06:51
回答 4查看 5.5K关注 0票数 0

如何在javascript上执行jQuery not

代码语言:javascript
复制
<div id='outerdiv'>
    <div class='class-1'></div>
    <div class='class-2'></div>
    <div class='class-3'></div>
    <div class='class-4'></div>
    <div class='news'></div>
</div>

$('#outerdiv').not('.news').css('background-color', 'red');

我想排除一些可以使用jQuery not执行的元素,但目前,我希望它在javascript上。

EN

回答 4

Stack Overflow用户

发布于 2013-12-09 17:22:46

即使使用jQuery,给定的代码也不会产生预期的效果。

jQuery中的not方法过滤匹配的元素集,以排除那些匹配条件的元素。Example $(".animal").not(".dog")最初匹配任何动物,然后进行过滤以排除狗。过滤结束时的有效jQuery对象仍将包括其他动物,但不再包括狗。这不会执行任何DOM树搜索,也不会考虑后代。选择器将应用于原始匹配集中的每个元素,如果匹配,则排除该元素。

在您的示例中,为了突出显示除新闻之外的所有子<div>The correct way (jsFiddle)将选择所有子<div>元素,然后过滤:

代码语言:javascript
复制
$('#outerdiv > div').not('.news').css('background-color', 'red');

要在(非框架增强的) JS中重现这段代码,请尝试(jsfiddle):

代码语言:javascript
复制
var divs = document.querySelectorAll('#outerdiv > div:not(.news)');

for (var i=0; i < divs.length; i++) {
    divs[i].style.backgroundColor = 'red';
}

:not() pseudo-element selector是一个CSS3选择器,用于过滤匹配的元素。然而,它比jQuery的.not()有更多的限制,而且它只允许在其中嵌套某些选择器。从MDN文档:

否定CSS伪类:

(X)是一个以简单选择器X作为参数的函数表示法。它与未由参数表示的元素匹配。X不能包含另一个否定选择器,也不能包含任何伪元素。

票数 2
EN

Stack Overflow用户

发布于 2013-12-09 17:12:18

如果你想用原始的javascript达到同样的效果,你可以尝试这样做:

代码语言:javascript
复制
[].forEach.call(document.querySelectorAll("#outerdiv div:not(.news)"), function (value, index, array) {
    value.style.backgroundColor = "red";
});

另请参阅:

实时节点列表和非实时节点列表之间的差异。看看

票数 1
EN

Stack Overflow用户

发布于 2013-12-09 17:17:19

如果我理解您想要什么( This is probably what you meant to be your example ),我认为您的示例jquery可能有错误。

你可以这样做:

example link

Javascript:

代码语言:javascript
复制
    // Find the correct table...
var table = document.getElementById("mytable"),
    // Find all the td's inside it...
    td = table.getElementsByTagName("td");

// Loop through each td inside the table...
for ( var i=0; i < td.length; i++ ) {

    // If td has a class that is anything but .exclude...
    if ( td[i].className !== 'exclude' ) { 

        // Add class to all non-excluded elements
        td[i].className = "mark";

    }

}

Html:

代码语言:javascript
复制
<table id="mytable">
    <tr>
        <td>td-1</td>
        <td>td-2</td>
    </tr>
    <tr>
        <td class="exclude">td-3</td>
        <td>td-4</td>
    </tr>
    <tr>
        <td>td-5</td>
        <td>td-6</td>
    </tr>
</table>

Css:

代码语言:javascript
复制
.mark { color: red; }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20465020

复制
相关文章

相似问题

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