这是我的问题的类比(一个选择器,它有一个选择器和一个类选择器):
假设我在任意HTML文档中选择所有黄色(类)div元素。我希望每个人检查属性是否为yes = 1.如果属性'yes'等于'1',那么我希望类'blue'的孩子的属性'no'等于'1';
$('div .yellow').each(function(){
if($(this).attr('yes') == 1){
$(this '.blue:first-child').attr('no', 1);//This line needs to be fixed
}
});
我知道第this.getElementsByClassName('blue')[0]
行解决了这个问题。但在我真正的问题(不是这个类比)中,我想使用addClass和removeClass,它只能用于jQuery对象。使用除addClass和removeClass之外的其他函数是很麻烦的。
更新:
以下是我真正问题的代码段。我在javascript中遇到了“this”的问题。
我想要一个邀请按钮,当我点击它时可以看到className。该按钮位于带有className'box'的div元素中。我知道代码片段中存在'this'问题。但我希望按钮而不是框改为可见
$('.Box').each(function(){
if($(this).attr('hasButton') != 1){
var invite = document.createElement('div');
invite.className = 'invite invisible';
invite.innerHTML = 'invite';
$(this).attr('hasButton', 1);
this.appendChild(invite);
invite.addEventListener('mouseover', function(event){
$('.invite', this).removeClass('invisible');//this line is not functioning
$('.invite', this).addClass('visible');//neither this
}, false);
}
});
好的解决了。我传递了一个元素作为属性而不是classSelector。
$(invite).removeClass('invisible');
$(invite).addClass('visible');
答案 0 :(得分:1)
你的意思是每个蓝色div
都生活在自己的黄色div
中吗?如果是这样,试试这个:
$('.blue:first-child', this).attr('no', 1);
这告诉jQuery选择仅在.blue
范围内找到的this
元素(它指的是.yellow
当前正在迭代的each()
元素。)
答案 1 :(得分:1)
$('div .yellow[yes=1] .blue:first-child').attr('no', 1);
您可以使用tagname[attrname=attrvalue]
来匹配任意属性。
您也可以使用find()
仅查看特定元素。
var yellow = $('div .yellow[yes=1]');
yellow.find('.blue:first-child').attr('no', 1);