我正在寻找一种方法来将类添加到另一个类的某个元素中。
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li class="hide">Item 4</li>
<li class="hide">Item 5</li>
<ul>
JS / Jquery的
if($('li').hasClass('hide')) {
$('li').removeClass('hide').addClass('slide-down');
}
问题是,类slide-down
会被添加到所有li
个元素中。
有没有办法只定位已删除li
类的hide
元素?
答案 0 :(得分:4)
可能是因为HTML中的拼写错误:class"hide"
(你错过了等号)。
您的代码中也出现了逻辑错误:
if($('li').hasClass('hide'))
如果文档中的任何<li>
元素具有hide
类,则条件将为true。$('li').removeClass('hide').addClass('slide-down');
第一个分段$('li')
将实际选择文档中的所有<li>
个元素,并从中删除类hide
并将slide-down
添加到所有文档中的<li>
元素。以下是我的表现:
$('li.hide').removeClass('hide').addClass('slide-down');
请注意,jQuery是关于链接的,即选择子集并将函数应用于这些子集。
这一行的作用是:
$('li.hide')
选择文档中包含<li>
类的所有hide
元素 - 这就是您的工作子集&#34;现在.removeClass('hide')
从我们在第一步中获得的子集中删除hide
类,并再次返回相同的子集。.addClass('slide-down')
将slide-down
类添加到从步骤2返回的所选子集中的所有<li>
,与步骤1中的相同。答案 1 :(得分:0)
在香草JS中:
var liHide = document.querySelectorAll('li.hide');
var i;
var length = liHide.length;
for (i=0;i<length;i++) {
liHide[i].className = 'slide-down';
}
请注意,由于某些原因,querySelectorAll
不会像document.getElementsByClassName
那样自动更新。如果我们使用该方法来查询DOM,那么相同的代码将无效:
var liHide = document.getElementsByClassName('hide');
var i;
var length = liHide.length;
for (i=0;i<length;i++) {
liHide[i].className = 'slide-down'; //<-- this won't update the 2nd element
}
这只会更改第一个元素,因为liHide[1]
变为liHide[0]
,因为<li class="hide">Item 4</li>
不再是HTML Collection的一部分。
答案 2 :(得分:0)
querySelectorAll
和classList
支持的简单javascript:
var items = document.querySelectorAll('li.hide');
for (var i = 0; i < items.length; i++) {
items[i].classList.remove('hide');
items[i].classList.add('slide-down');
}
没有querySelectorAll
:
var items = document.getElementsByTagName('li');
for (var i = 0; i < items.length; i++) {
if (items[i].classList.contains('hide')) {
items[i].classList.remove('hide');
items[i].classList.add('slide-down');
}
}
没有querySelectorAll
和classList
:
var items = document.getElementsByTagName('li');
for (var i = 0; i < items.length; i++) {
if (new RegExp(/(?:^|\s)hide(?!\S)/g).test(items[i].className)) {
items[i].className = items[i].className.replace(/(?:^|\s)hide(?!\S)/g , '');
items[i].className += ' ' + 'slide-down';
}
}