Eu quero aplicar um estilo a um determinado div. Por exemplo, no tempo de carregamento, tudo com uma classe de foo seria mostrado, mas eu posso querer desativar uma instância da classe foo que tem um id de bar.
Nicholas Murray
1
Então você simplesmente faria, $('#bar.foo').toggle();você sempre terá apenas um id, pois eles são EXIGIDOS para serem exclusivos para o documento. se você deseja alternar esse id apenas se for da classe foo, basta adicionar a classe ao seletor de id. se o seletor encontrar um conjunto vazio, nada acontecerá, se ele encontrar um conjunto com resultados (dos quais haverá apenas um), ele alternará o elemento. Eu acho que você está pensando demais nisso.
prodigitalson
3
apenas para dizer que é frustrante as pessoas dizerem "por que você faria isso?" quando estou tentando fazer isso agora. O problema com hasClass é que ele retorna True se QUALQUER elemento que corresponda ao seletor tiver a classe fornecida. Então, onde tenho muitos p com a classe "bolo" e nomes de classe adicionais para cada um ("um", "dois" etc.), estou tendo um problema. Quero selecionar o conjunto geral de p.cake e, em seguida, ter um condicional (if class = "one" - $ var = 23 - etc). A questão é que estou tentando passar um $ var diferente, dependendo do nome da classe adicional. Estou tentando não ter que repetir tudo o
Stella
Respostas:
171
Você pode assar essa lógica no seletor combinando vários seletores . Por exemplo, podemos direcionar todos os elementos com um determinado id, que também têm uma classe particular:
Isso deve ser semelhante a algo que você escreveria em CSS. Observe que não se aplica a todos os #fooelementos (embora deva haver apenas um) e não se aplica a todos os .barelementos (embora possa haver muitos). Ele fará referência apenas a elementos que se qualificam em ambos os atributos.
jQuery também tem um ótimo .ismétodo que permite determinar se um elemento possui certas qualidades. Você pode testar uma coleção jQuery em um seletor de string, um elemento HTML ou outro objeto jQuery. Nesse caso, vamos apenas verificar em um seletor de string:
$(".bar:first").is("#foo");// TRUE if first '.bar' in document is also '#foo'
Talvez o código esteja indo para uma função de retorno de chamada que precisa lidar com um determinado caso de maneira diferente. Portanto, a função é passada a um objeto jQuery automaticamente com atributos desconhecidos. Nesse caso, $ ('sua resposta'). Is ('útil');
Peter G
1
Posso pensar em uma série de razões. E se você quiser aplicar uma configuração específica para celular, como se um elemento tivesse id = "mobile". O porquê não é importante.
Colocável em
Bem, apenas 1 elemento deve ter um dado, idcaso contrário, deve ser algum outro atributo ... Suponho que se a localização estrutural do elemento em questão muda com base na página ou cliente / agente do usuário, ok, mas diferente disso .. .
prodigitalson
19
atualização: desculpe entendeu mal a pergunta, .has()resposta removida .
outra forma alternativa, criar .hasId()plugin
// the plugin
$.fn.hasId =function(id){returnthis.attr('id')== id;};// select first class
$('.mydiv').hasId('foo')?
console.log('yes'): console.log('no');// select second class// $('.mydiv').eq(1).hasId('foo')// or
$('.mydiv:eq(1)').hasId('foo')?
console.log('yes'): console.log('no');
Desculpe, mas acho que você interpretou mal a pergunta: has () API relata isto: Reduza o conjunto de elementos correspondentes para aqueles que têm um descendente que corresponda ao seletor ou elemento DOM. O OP está perguntando como testar se o elemento com a classe 'myDiv' também tem o Id foo, enquanto has () irá procurar descendentes de 'myDiv' tendo o Id 'foo'.
Inclinação
7
Digamos que você esteja iterando por meio de alguns objetos DOM e queira encontrar e capturar um elemento com um certo ID
O mesmo código pode ser facilmente modificado para o seletor de classe.
<divid="myDiv"><divclass="fo"><div><divclass="bar"><div><divclass="fo"><div><divclass="bar"><div><divclass="fo"><div><divclass="bar"><div></div>
$('#myDiv div').each(function() {
if($(this).hasClass('bar'))
//do something with bar
});
Fico feliz que você tenha resolvido seu problema com index (), o que sempre funcionou para você. Espero que isso ajude outras pessoas com o mesmo problema. Felicidades :)
o each é desnecessário porque nunca haverá mais de um #theMysteryId.
prodigitalson
2
Bem, isso evita o trabalho de atribuí-lo a uma variável, verificar se o comprimento não está vazio e, em seguida, prosseguir com o código. Se o seletor não corresponder a nada, o jQuery simplesmente não chamará a função "each", então é bom e limpo. Agora, se tudo o que você quer fazer é chamar alguma API jQuery, então com certeza.
Pointy de
4
Só para dizer que acabei resolvendo isso usando index ().
NADA mais parecia funcionar.
Portanto, para elementos irmãos, essa é uma boa solução se você estiver primeiro selecionando por uma classe comum e depois quiser modificar algo diferente para cada classe específica.
EDIT: para quem não sabe (como eu) index () dá um valor de índice para cada elemento que combina com o seletor, contando de 0, dependendo de sua ordem no DOM. Contanto que você saiba quantos elementos existem com class = "foo", você não precisa de um id.
Obviamente, isso nem sempre ajuda, mas alguém pode achar útil.
$('#bar.foo').toggle();
você sempre terá apenas um id, pois eles são EXIGIDOS para serem exclusivos para o documento. se você deseja alternar esse id apenas se for da classefoo
, basta adicionar a classe ao seletor de id. se o seletor encontrar um conjunto vazio, nada acontecerá, se ele encontrar um conjunto com resultados (dos quais haverá apenas um), ele alternará o elemento. Eu acho que você está pensando demais nisso.Respostas:
Você pode assar essa lógica no seletor combinando vários seletores . Por exemplo, podemos direcionar todos os elementos com um determinado id, que também têm uma classe particular:
Isso deve ser semelhante a algo que você escreveria em CSS. Observe que não se aplica a todos os
#foo
elementos (embora deva haver apenas um) e não se aplica a todos os.bar
elementos (embora possa haver muitos). Ele fará referência apenas a elementos que se qualificam em ambos os atributos.jQuery também tem um ótimo
.is
método que permite determinar se um elemento possui certas qualidades. Você pode testar uma coleção jQuery em um seletor de string, um elemento HTML ou outro objeto jQuery. Nesse caso, vamos apenas verificar em um seletor de string:fonte
is()
. Deve haver um.hasId()
seletor só porque parece um parceiro óbvio para.hasClass()
realmente ...Eu provavelmente usaria
$('.mydiv').is('#foo');
Isso, se você souber a Id, por que não aplicaria apenas no seletor em primeiro lugar?fonte
id
caso contrário, deve ser algum outro atributo ... Suponho que se a localização estrutural do elemento em questão muda com base na página ou cliente / agente do usuário, ok, mas diferente disso .. .atualização: desculpe entendeu mal a pergunta,
.has()
resposta removida .outra forma alternativa, criar
.hasId()
pluginfonte
Digamos que você esteja iterando por meio de alguns objetos DOM e queira encontrar e capturar um elemento com um certo ID
Você pode escrever algo como encontrar
Observe que, se você usar um seletor de classe, o método find retornará todos os elementos correspondentes.
ou você pode escrever uma função iterativa que fará um trabalho mais avançado
O mesmo código pode ser facilmente modificado para o seletor de classe.
Fico feliz que você tenha resolvido seu problema com index (), o que sempre funcionou para você. Espero que isso ajude outras pessoas com o mesmo problema. Felicidades :)
fonte
fonte
#theMysteryId
.Só para dizer que acabei resolvendo isso usando index ().
NADA mais parecia funcionar.
Portanto, para elementos irmãos, essa é uma boa solução se você estiver primeiro selecionando por uma classe comum e depois quiser modificar algo diferente para cada classe específica.
EDIT: para quem não sabe (como eu) index () dá um valor de índice para cada elemento que combina com o seletor, contando de 0, dependendo de sua ordem no DOM. Contanto que você saiba quantos elementos existem com class = "foo", você não precisa de um id.
Obviamente, isso nem sempre ajuda, mas alguém pode achar útil.
fonte
Verifique se o ID do elemento existe
fonte
Você também pode verificar se o elemento id é usado ao fazer isso:
Eu uso este método para dataTables globais e dataTables ordenados específicos
fonte