循环遍历类相似的元素
Looping through elements with similar class
如何循环遍历特定div标记内的一组元素?这个方法是在Angular.js代码的工厂中定义的。
<div id="idName">
<span class="className">Monday</span>
<span class="className">Tuesday </span>
</div>
Javascript: var currentTime = new Date();
var today = currentTime.getDay(); //0-7
var d = new Date();
var weekday = new Array(7);
weekday[0]= "Sunday";
weekday[1] = "Monday";
weekday[2] = "Tuesday";
$('#idName .className').each(function(index, item) {
if(item.text) //This part never runs
{
if(item.text.indexOf(weekday[today])!=-1) {
item.addClass('currentDay'));
}
else {
item.removeClass('currentDay');
}
}
});
使用weekday[]中的indexOf,而不是文本项(您想知道日期是否在数组中)。并且在包含Tuesday的span之后有一个额外的空间(因此它不会被indexOf找到)。试试这个:
<div id="idName">
<span class="className">Monday</span>
<span class="className">Tuesday</span>
</div>
然后按如下方式更新代码(这部分没有更改):
var currentTime = new Date();
var today = currentTime.getDay(); //0-7
var d = new Date();
var weekday = new Array(7);
weekday[0]= "Sunday";
weekday[1] = "Monday";
weekday[2] = "Tuesday";
addClass/removeClass也不是item (dom元素)的函数,而是每个循环中的$(item)的函数。
$('#idName .className').each(function(index, item) {
if(item.textContent) //This part never runs
{
if(weekday.indexOf(item.textContent) == today) {
$(item).addClass('currentDay');
}
else {
$(item).removeClass('currentDay');
}
}
});
循环部分很好,问题是元素没有text
属性。你可能想用$(item).text()
。还请注意,item
将只是一个DOM元素,而不是一个jQuery对象。获得该元素的惯用方法是this
,而不是item
(除非您必须这样做,因为您正在将this
用于其他内容):
$('#idName .className').each(function(index) {
var item = $(this),
text = item.text();
if (text) {
if (text.indexOf(weekday[today]) != -1) {
item.addClass('currentDay');
} else {
item.removeClass('currentDay');
}
}
});
(在item.addClass('currentDay');
行上还有一个额外的)
)。
text
是方法而不是属性。使用.text()
代替.text
。context this
在迭代中指的是每次迭代中各自的元素。您可以使用它来创建它的jquery对象。你也可以使用toggleClass
和布尔条件来添加/删除基于条件的类:
$('#idName .className').each(function() {
if($(this).text().length)
$(this).toggleClass('currentDay',$(this).text().indexOf(weekday[today])!=-1);
});
$("#idName .className")
已经是一个元素集合,你可以直接进入.text()
$('#idName .className').text(function(i,v) {
$(this).toggleClass("currentDay", $.trim(v)===weekday[today]);
});
jsBin演示
p。S:
- 你的代码中有额外的
);
。使用开发人员工具、控制台检查错误。 -
currentTime.getDay()
不能给你0-7但是0-6
因为星期天是0
而星期六是6
在使用方法之前先阅读jQuery文档。 -
weekday
Array可以定义为var weekday = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
- 使用
$.trim()
删除不需要的换行空白
我会检查item。innerHTML而不是item。if语句中的文本
相关文章:
- CKEditor Widget-阻止编辑可编辑元素本身
- 对 DOM 中的不同元素进行重新排序/分组,以便包装相似的元素
- Ajax附加的元素赢得't与masonry.js定位的相似元素一致
- 获取ID相似的元素's使用jQuery
- 获取javascript中id数组相似的所有元素
- Javascript:为HTML文档中所有相似元素的副本选择文本
- 如何简化具有相似元素的ng-switch
- 将父DIV's与ID相似的子元素切换以计算其价格
- 如何将jQuery函数应用于具有相似id的DOM元素
- 循环遍历类相似的元素
- Angular.js正在处理一个元素,但在一个非常相似的元素上却没有
- 改变具有相似id的元素的css属性
- jQuery验证插件检查名称相似的下拉、科学和元素
- 以具有相似类的每个元素组的第一个同级为目标
- Jquery验证具有相似名称的元素
- 按时间间隔链接相似元素修改
- 我怎么能在JS中找到一个ID相似的元素呢
- 如何使用jsview刷新具有相似类的多个元素
- 如何用jQuery为许多相似的元素添加类
- 迭代具有相似id的元素