[英]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.cookie
和jquery
,这是我的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");
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.