1

我需要代码来检查 .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>
4

2 回答 2

3

您可以使用 an.each()来遍历它们:

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

或者您可以使用属性选择器

$('.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(...)

原始示例

于 2012-09-25T15:38:29.197 回答
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
    }
});
于 2012-09-25T15:36:13.287 回答