jQuery:not / .not过滤器表现不正常

时间:2012-09-10 10:03:07

标签: jquery

所以我试图通过javascript(主要是为了优雅的降级目的)等在我的文档的某个部分中为我的所有图像(用于翻转)添加一些代码等等

注意到我的功能不起作用...我写了一个超小功能来测试它并没有好处。在这个例子中,我想要做的是警告图像alt标签,但特定按钮div。基本上,将所述函数应用于父div(portSecW)中的所有图像,而不是关闭按钮image / div。

所以为了这个例子,继承了一些HTML(伪):

<div id="portSecW">
  <img src="X" alt="something here"></img>
  <img src="a" alt="something here"></img>
  <img src="b" alt="something here"></img>
  <div class="closeXbtn"><img src="g" alt="something here"></img></div>
</div>

这是我尝试过的。

$('#portSecW img:not(".closeXbtn")').click(function(){
    alert($(this).attr("alt")); 
    return false;
});

我也是这样的

$('#portSecW img').not('.closeXbtn').click(function(){
    alert($(this).attr("alt")); 
    return false;
});
我也尝试过这样但不起作用(所以我假设虽然我没有错误,但由于警报功能不起作用,所以它没有正确构建。)

$('#portSecW img.not(".closeXbtn")').click(function(){
    alert($(this).attr("alt")); 
    return false;
});

所以不确定我做错了什么。

先谢谢。

注意:只是因为任何人都在寻找,标记的“”接受的答案“对我有用,但在进一步挖掘。我上面的所有尝试都起作用,问题是我不够精确,我怎么样遍历了DOM。所以所有这些都做同样的事情和工作。这里是我所做的改变,这些都是有效的。

$('#portSecW a').children('img').click(function(){
    alert($(this).attr("alt")); 
    return false;
});

$('#portSecW img').not(".closeXbtn img").click(function(){
    alert($(this).attr("alt")); 
    return false;
});

$('#portSecW img:not(".closeXbtn img")').click(function(){
    alert($(this).attr("alt")); 
    return false;
});

感谢大家的帮助

5 个答案:

答案 0 :(得分:1)

尝试删除课程周围的引号,例如:

$('#portSecW img:not(.closeXbtn)').click(function(){
  alert($(this).attr("alt")); 
  return false;
});

如果你没有做到这样的事情:

$('#portSecW img').click(function(){
  if($(this).hasClass('closeXbtn')))  { /* do something */ }
});

答案 1 :(得分:1)

使用.children()

$('#portSecW').children('img').click(function(){
    alert($(this).attr("alt")); 
    return false;
});

.children()方法允许我们在DOM树中搜索这些元素的子元素,并从匹配元素构造一个新的jQuery对象。

.children()方法与.find()的不同之处在于.children() 只能在DOM树中向下移动

答案 2 :(得分:0)

试试这个:

$('#portSecW img').not(".closeXbtn img").click(function(){
    alert($(this).attr("alt")); 
    return false;
});

OR

$('#portSecW > img').click(function(){
    alert($(this).attr("alt")); 
    return false;
});

第二个更准确。这会将click事件绑定到portSecW的直接子项。

答案 3 :(得分:0)

也许这可以帮到你:

$('#portSecW > img').click(function(){
    alert($(this).attr("alt")); 
    return false;
});

...它只会选择主div的直接IMG后代,省略closeXbtn div中的那个。

但是,如果您需要保留您的功能,也许这可能会更好用:

$('#portSecW img:not(:parent(.closeXbtn))').click(function(){
    alert($(this).attr("alt")); 
    return false;
});

答案 4 :(得分:0)

删除“不”,只需编辑此

$('#portSecW img').click(function(){
  if($(this).hasClass('closeXbtn'))
    //Do some play
})