Eu tenho o seguinte cenário:
var el = 'li';
e há cinco <li>
na página, cada um com um data-slide=number
atributo (número sendo 1,2,3,4,5, respectivamente) .
Agora, preciso encontrar o número do slide atualmente ativo, mapeado var current = $('ul').data(current);
e atualizado a cada alteração do slide.
Até o momento, minhas tentativas não tiveram êxito, tentando construir o seletor que corresponderia ao slide atual:
$('ul').find(el+[data-slide=+current+]);
não corresponde / retorna nada…
O motivo pelo qual não posso codificar a li
peça é que essa é uma variável acessível ao usuário que pode ser alterada para um elemento diferente, se necessário, portanto nem sempre é uma li
.
Alguma idéia do que estou perdendo?
.find(el+[data-slide=+current+]);
código está escrito? parece que você perdeu algumas citações para"[data-slide]"
$('*[data-slide]')
Você pode usá-lo com, por exemplo$('*[data-slide]').each( function() { ... });
Respostas:
Você deve injetar o valor de
current
em um seletor de Igual a Atributo :Para ambientes JavaScript mais antigos ( ES5 e versões anteriores):
fonte
$("ul").find(el + "[data-slide='" + current +"']");
.caso você não queira digitar tudo isso, veja uma maneira mais curta de consultar por atributo de dados:
FYI: http://james.padolsey.com/javascript/a-better-data-selector-for-jquery/
fonte
<ul><li data-slide="item"></li></ul>
o seletor dessa resposta retornará indefinido para que não funcione de acordo com o cenário do usuário. Esta resposta funcionará para a estrutura<ul data-slide="item"><li></li></ul>
Embora eu entenda por que sua popularidade devido à brevidade, é tecnicamente uma resposta incorreta. jsfiddle.net/py5p2abL/1[0]
para acessar o primeiro elemento encontrado..find("[data-attrib='value']")
não funcionou. Eu não sei se os valores foram dados atributos foram adicionados pelo jQuery ou não ...$.find
especificamente os descendentes desse elemento, mas o uso da sintaxe de filtro na cadeia de seleção simplesmente filtra os resultados.Ao pesquisar com [data-x = ...], cuidado, ele não funciona com o setter jQuery.data (..) :
Você pode usar isso:
fonte
$.fn.filterByData
é brilhante; no entanto, este é um aviso para os copiadores que estão por aí ... você só precisa$('<b>').filterByData('x', 1)
encontrar<b>
tagsdata-x="1"
. se você copiar e colar a.data(x, 1)
parte ... você definirá seudata-x
"1" antes de filtrar.I melhorado extensão filterByData de brm psico para jQuery.
Onde a extensão anterior pesquisou em um par de valor-chave, com essa extensão, você também pode procurar a presença de um atributo de dados, independentemente de seu valor.
Uso:
Mostrar snippet de código
Ou o violino: http://jsfiddle.net/PTqmE/46/
fonte
Sem JQuery, ES6
Eu sei que a pergunta é sobre JQuery, mas os leitores podem querer um método JS puro.
fonte
Eu enfrentei o mesmo problema ao buscar elementos usando o jQuery e o atributo data- *.
portanto, para sua referência, o código mais curto está aqui:
Este é o meu código HTML:
Este é o meu seletor jQuery:
fonte
Espero que isso funcione melhor
obrigado
fonte
Este seletor
$("ul [data-slide='" + current +"']");
funcionará para a seguinte estrutura:Embora isso
$("ul[data-slide='" + current +"']");
funcione para:<ul data-slide="item"><li></li></ul>
fonte
Voltando à sua pergunta original, sobre como fazer isso funcionar sem conhecer o tipo de elemento com antecedência, o seguinte é o seguinte:
fonte