【问题标题】:How can I use jquery to select elements from array and add class?如何使用 jquery 从数组中选择元素并添加类?
【发布时间】:2018-05-07 14:43:06
【问题描述】:

我想根据父元素的“隐藏”类添加到子元素 data-node-tag 来自数组,我尝试控制台记录数组并获取数组,但我不能使用该数组的值在其上添加类..

附:该数组来自名为 collapsed_Nodes 的 cookie,我已将其拆分。

我用js.cookiejquery,这是我的JS Fiddle

$(document).ready(function() {
  var adjustCookie = function() {
    var tags = [];
    $('.accordion_container .hide').each(function() {
      var tag = $(this).prev('.accordion_head').data("node-tag");
      tags.push(tag.replace('#', '#'));
    });

    if (tags.length) {
      Cookies.set('collapsed_Nodes', tags.join('|'), {
        expires: 7
      });
    } else {
      Cookies.remove('collapsed_Nodes');
    }
  }
  
  $(".accordion_head").click(function() {
    var tag = $(this).data("node-tag");
    if ($(this).next(".accordion_body").is(':visible')) {
      $(this).next(".accordion_body").slideUp(300);
      $(this).next(".accordion_body").addClass("hide");
      $(this).children(".plusminus").text('+');
    } else {
      $(this).next(".accordion_body").slideDown(300);
      $(this).next(".accordion_body").removeClass("hide");
      $(this).children(".plusminus").text('-');
    }
    adjustCookie();
  });
  
if (document.cookie.indexOf('collapsed_Nodes') >= 0) {
	var getCollapsed = Cookies.get('collapsed_Nodes');
  var Collapsed = getCollapsed.split('|');
  var arrayLength = Collapsed.length;
  for (var i = 0; i < arrayLength; i++) {
      $("data-node-tag".Collapsed[i]).next(".accordion_body").addClass("hide");
  }
}
});
.accordion_container {
  width: 500px;
}

.accordion_head {
  background-color: skyblue;
  color: white;
  cursor: pointer;
  font-family: arial;
  font-size: 14px;
  margin: 0 0 1px 0;
  padding: 7px 11px;
  font-weight: bold;
}

.accordion_body {
  background: lightgray;
}

.accordion_body p {
  padding: 18px 5px;
  margin: 0px;
}

.plusminus {
  float: right;
}

.hide {
  display: none;
}
<div class="accordion_container">
  <div class="accordion_head" data-node-tag="#1">First Accordian Head<span class="plusminus">-</span>
  </div>
  <div class="accordion_body">
    <p>First Accordian Body, it will have description</p>
  </div>
  <div class="accordion_head" data-node-tag="#2">Second Accordian Head<span class="plusminus">-</span>
  </div>
  <div class="accordion_body">
    <p>Second Accordian Body, it will have description</p>
  </div>
  <div class="accordion_head" data-node-tag="#3">Third Accordian Head<span class="plusminus">-</span>
  </div>
  <div class="accordion_body">
    <p>Third Accordian Body, it will have description</p>
  </div>
</div>

【问题讨论】:

标签: javascript jquery html css arrays


【解决方案1】:

另一种方法是通过属性值选择 div:

$('[data-node-tag="'+checkCollapsed[i]+'"]').next(".accordion_body").addClass("hide");

JSFiddle:https://jsfiddle.net/yuvakqha/22/

【讨论】:

    【解决方案2】:

    你的选择器错误,类必须在属性之前,属性要在括号内[]

    使用

    $("." + Collapsed[i] + [data-node-tag]).next(..).addClass("hide")
    

    https://api.jquery.com/has-attribute-selector/

    选择具有指定属性的元素,具有任意值。

    这是一个简化的例子

    $(".accordion_head[data-node-tag]").addClass("red");
    .red {
      color: red
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div class="accordion_container">
      <div class="accordion_head" data-node-tag="#1">First Accordian Head<span class="plusminus">-</span>
      </div>
      <div class="accordion_body">
        <p>First Accordian Body, it will have description</p>
      </div>
      <div class="accordion_head" data-node-tag="#2">Second Accordian Head<span class="plusminus">-</span>
      </div>
      <div class="accordion_body">
        <p>Second Accordian Body, it will have description</p>
      </div>
      <div class="accordion_head" data-node-tag="#3">Third Accordian Head<span class="plusminus">-</span>
      </div>
      <div class="accordion_body">
        <p>Third Accordian Body, it will have description</p>
      </div>
    </div>

    【讨论】:

    • 现在我知道数组和元素选择器是如何工作的了,非常感谢!
    【解决方案3】:

    尝试改变这一点:

    $("data-node-tag".Collapsed[i]).next(".accordion_body").addClass("hide");
    

    对此:

    $(Collapsed[i]).next(".accordion_body").addClass("hide");
    


    Collapsed 变量将在 .split() 之后输出数组
    Array [ "#2", "#3" ]
    

    在您的for 循环之后,输出将是:

    #2
    #3
    

    所以你可以像任何 ID 一样使用 jQuery 选择器来选择它

    $( Collapsed[i] )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-03
      • 2010-10-24
      相关资源
      最近更新 更多