简体   繁体   English

如何使用jquery从数组中选择元素并添加类?

[英]How can I use jquery to select elements from array and add class?

I want to add "hide" class to the child-element according to father-element's data-node-tag from array,I have try to console.log the array and got the array, but I can't use that array's value to add class on it.. 我想根据数组中父元素的data-node-tag将“ hide”类添加到子元素中,我已经尝试console.log该数组并获得了该数组,但是我无法使用该数组的值来在上面添加类。

PS That array is from cookie named collapsed_Nodes , and I have split it. PS该数组来自名为collapsed_Nodes Nodes的cookie,我已将其拆分。

I use js.cookie and jquery , here is my JS Fiddle 我使用js.cookiejquery ,这是我的JS小提琴

 $(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> 

Another approach would be selecting the div by the attribute value: 另一种方法是通过属性值选择div:

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

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

Try to change this: 尝试更改此:

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

To this: 对此:

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


The Collapsed variable will output array after .split() Collapsed变量将在.split()之后输出数组

 Array [ "#2", "#3" ] 

And after your for loop, the output will be: 在您的for循环之后,输出将是:

 #2 #3 

So you can select that with jQuery selector like any ID 因此,您可以像其他ID一样使用jQuery选择器进行选择

 $( Collapsed[i] ) 

Your selector is wrong, the class must come before the attribute and the attribute should be in brackets [] 您的选择器错误,类必须在属性之前,属性应放在方括号[]

Use 采用

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

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

Selects elements that have the specified attribute, with any value. 选择具有指定属性且具有任何值的元素。

Here is a simplified example 这是一个简化的例子

 $(".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> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM