一个选择器,它具有此选择器和类选择器

时间:2011-01-02 10:07:06

标签: jquery jquery-selectors

这是我的问题的类比(一个选择器,它有一个选择器和一个类选择器):

假设我在任意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');

2 个答案:

答案 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);