селектор, который имеет этот селектор вместе с селектором класса - PullRequest
0 голосов
/ 02 января 2011

Вот аналогия моей проблемы (селектор, который имеет этот селектор вместе с селектором класса):

Допустим, я выбираю все желтые (классы) элементы div в произвольном HTML-документе. И я хочу, чтобы каждый из них проверял, является ли атрибут 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.

UPDATE:

Вот фрагмент кода из моей настоящей проблемы. У меня есть некоторые проблемы с «этим» в JavaScript.

Я хочу, чтобы на приглашенной кнопке было отображено имя класса при нажатии на нее. Кнопка находится внутри элемента div с className 'box'. Я знаю, что есть проблема с этим в фрагменте кода. Но я хочу чтобы кнопка а не поле поменялось на видимое

$('.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 ]

1 голос
/ 02 января 2011
$('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);
1 голос
/ 02 января 2011

Вы имеете в виду, что каждый синий div живет в своем собственном желтом div?Если это так, попробуйте следующее:

$('.blue:first-child', this).attr('no', 1);

Это говорит jQuery о выборе .blue элементов, найденных только в области действия this (что относится к элементу .yellow, который в настоящее время повторяется с помощью each()).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...