如何使用jQuery将仅具有特定属性的元素与其他元素进行匹配?

时间:2018-07-12 12:04:33

标签: javascript jquery html

假设示例元素:

<a href="..." rel="...">...
<a href="..." rel="..." target="...">...

如何仅匹配第一个元素?我想告诉jQuery仅匹配具有<a>href属性的rel元素,而没有其他属性。 :not()要求我提及要排除的特定属性,但是未知属性呢?

4 个答案:

答案 0 :(得分:4)

使用filter()并检查属性长度。请注意,添加任何类似类或数据属性的内容将意味着您需要对此进行修改

$('a[href][rel]').filter(function(){
   return this.attributes.length === 2;  
}).css('color','red')
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="#" rel="foo" target="_blank"> Has target</a>
<a href="#" rel="foo" > No target</a>
<a href="#"  > No rel </a>

答案 1 :(得分:2)

您可以为此使用not()first()函数来选择集合中的第一个元素并过滤掉不需要的元素。

示例:

$("a[href][rel]").not("[target]").first();

为了排除包含其他未知属性的项目,应按照其他答案的建议使用过滤器。

但这不是一个好的解决方案,最好将一个类添加到需要选择的元素中,或者将它们放在另一个div中。

答案 2 :(得分:0)

使用带有测试条件的.filter()来检查元素只有属性长度

$('a[href][rel]').filter(function() {
  return this.attributes.length == 2
}).addClass('a');
.a {
  background-color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="..." rel="...">...</a>
<a href="..." rel="..." target="...">...</a>

答案 3 :(得分:0)

您可以使用@Override public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, int position) { if(position == selectedPos){ holder.imageViewCheck.setVisibility(View.VISIBLE); } else { holder.imageViewCheck.setVisibility(View.INVISIBLE); } } 并进一步检查this.hasAttribute以确认this.attributes.length === 2元素仅具有两个属性:

<a>
$('a').each(function(){
   if(this.attributes.length == 2 && this.hasAttribute("href") && this.hasAttribute("rel")){
     $(this).addClass('selected');
   }
});
.selected{
  color: green;
}