JQuery选择:两个属性的值彼此不相等

时间:2016-04-11 20:50:02

标签: javascript jquery forms

我正在尝试为具有两个具有不同值的特定属性的元素执行JQuery select函数。

(之所以如此,我可以选择已经改变的输入。)

但是,我似乎找不到任何显示这种情况的文档。

这是一个隐藏以这种方式选择的元素的测试,但就像我说的,我找不到合适的语法来使它工作。

我试过了:

"[value]!=[oldvalue]" 
"[value!=[oldvalue]]" 
"[value!=oldvalue]" 

还有其他一些疯狂的事情都会失败。

有什么建议吗?

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script>
$(document).ready(function(){
    $("button").click(function(){
        $("[value<>[oldvalue]]").hide();
    });
});
</script>
</head>
<body>

<h2>This is a heading</h2>

<p>This is another paragraph.</p>
<p value="2" oldvalue="1">This is a paragraph to go away.</p>
<p>This is another paragraph.</p>

<button>Click me</button>

</body>
</html>

4 个答案:

答案 0 :(得分:2)

您需要使用过滤器,因为逻辑对于单个选择器来说太复杂了。试试这个:

:8.4.0

答案 1 :(得分:1)

忽略示例中的无效HTML,您可以使用jQuery的filter实现此目的:

> x <- c(1,2,2,3,3,3,4,4,4,4,1) 
> y <- c(1,2,1,2,1,2,1,2,3,4,5)
> 
> table(x)  
x
1 2 3 4 
2 2 3 4 
> # x has 2 ones, 2 twos, 2 threes, 4 fours  
> 
> table(y)  
y
1 2 3 4 5 
4 4 1 1 1 
> # y has 4 ones, 4 twos, 1 three, 1 four, 1 five
> 
> table(x,y) 
   y
x   1 2 3 4 5
  1 1 0 0 0 1
  2 1 1 0 0 0
  3 1 2 0 0 0
  4 1 1 1 1 0
> # For example there are 2 cases when x is three and y is two at the same time
> # but 0 cases when x is two and y is three at the same time

$('[value][oldvalue]').filter(function() {
    var $el = $(this);
    return $el.attr('value') !== $el.attr('oldvalue');
});
var results = $('[value][oldvalue]').filter(function() {
  var $el = $(this);
  return $el.attr('value') !== $el.attr('oldvalue');
});


$('[value][oldvalue]').hide();
$(results).show();

答案 2 :(得分:1)

您可以定位共享这两个属性的所有元素,然后使用jQuery filter()函数找到那些不匹配的元素:

$("button").click(function(){
  // Find all elements that have both attributes
  $('[value][oldvalue]').filter(function(){ 
       // Filter those that do not match
       return $(this).attr('value') !== $(this).attr('oldvalue');
  }).hide();
});

你可以see an example of this in action here

答案 3 :(得分:1)

猜猜我和其他一些人在同一时间发布了这个帖子,但我在这里找到了一个有效的片段。

选择具有所需属性的所有元素,并使用filter()将设置减少为具有不相等值的设置,如下所示:

&#13;
&#13;
$(document).ready(function() {
  $("button").click(function() {
    var els = $("[value][oldvalue]").filter(function(i) {
      return $(this).attr('value') != $(this).attr('oldvalue');
    }).hide();

  });
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<h2>This is a heading</h2>

<p>This is a paragraph.</p>
<p value="2" oldvalue="1">This is a paragraph to go away.</p>
<p value="2" oldvalue="2">This is a paragraph to <b>not</b> go away.</p>

<button>Click me</button>
&#13;
&#13;
&#13;