检查所有相同类元素的数据

时间:2012-09-25 15:30:57

标签: javascript jquery

我需要代码来检查.account-select的所有实例的数据名称值。现在它只检查第一个.account-select元素而不是任何后续元素。

现在该功能是点击John Smith之类的元素,它会检查.account-select lis的数据名。如果数据名称相同,则不会使用John Smith数据创建新的li。 如果没有数据名称等于John Smith,那么它会添加一个与John Smith的li。

这是我为它制作的JS-Fiddle所以你可以看到我指的是:http://jsfiddle.net/rsxavior/vDCNy/22/ 任何帮助将不胜感激。

这是我现在正在使用的Jquery代码。

$('.account').click(function () {
   var acc = $(this).data("name");
    var sel = $('.account-select').data("name");           
    if (acc === sel) {
    }
    else {
         $('.account-hidden-li').append('<li class="account-select" data-name="'+ $(this).data("name") +'">' + $(this).data("name") + '<a class="close bcn-close" data-dismiss="alert" href="#">&times;</a></li>');
    }
});

HTML:

<ul>
    <li><a class="account" data-name="All" href="#">All</a></li>
    <li><a class="account" data-name="John Smith" href="#">John Smith</a></li>
</ul>

<ul class="account-hidden-li">
    <ul>

2 个答案:

答案 0 :(得分:3)

您可以使用.each()对所有内容进行迭代:

var acc = $(this).data('name');
$('.account-select').each(function(){
  var sel = $(this).data('name');
  if (acc == sel){
  }else{
    // $(...).append(...)
  }
});

或者您可以使用attribute selector

$('.account-select[data-name="'+acc+'"]') // assuming no `"` in acc otherwise
                                          // you're going to need to escape it

这意味着您还可以使用:not()选择器来实现您的目标:

var acc = $(this).data('name');
$('.account-select:not([data-name="'+acc+'"])')
  .append(...)

Primitive Example

答案 1 :(得分:1)

如您所知,$('.account-select').data("name")仅从第一个元素获取数据。您需要遍历每个.account-select并获取其数据。

$('.account-select').each(function(i, v){
    var sel = $(v).data('name');
    if (acc === sel) {
        // Do something if they match
    }
    else{
        // Do something else if they don't
    }
});