$("*").click(function(){
$(this); // how can I get selector from $(this) ?
});
Existe uma maneira fácil de obter o seletor$(this)
? Existe uma maneira de selecionar um elemento por seu seletor, mas que tal pegar o seletor do elemento ?
$("*").click(function(){
$(this); // how can I get selector from $(this) ?
});
Existe uma maneira fácil de obter o seletor$(this)
? Existe uma maneira de selecionar um elemento por seu seletor, mas que tal pegar o seletor do elemento ?
Respostas:
Ok, então, em um comentário acima do autor da pergunta
Fidilip
disse que o que ele realmente quer é obter o caminho para o elemento atual.Aqui está um script que "escalará" a árvore ancestral do DOM e, em seguida, construirá um seletor bastante específico, incluindo qualquer atributo
id
ouclass
no item clicado.Veja-o funcionando no jsFiddle: http://jsfiddle.net/Jkj2n/209/
Por exemplo, se você clicar no segundo item da lista aninhada no HTML abaixo, obterá o seguinte resultado:
HTML>BODY>UL>LI>UL>LI#sub2.subitem.otherclass
fonte
join(" > ");
, obterá os filhos imediatos e, portanto, um caminho mais rígido .:: AVISO ::
.selector tornou-se obsoleto a partir da versão 1.7, removido a partir de 1.9
O objeto jQuery tem uma propriedade selector que vi ao pesquisar em seu código ontem. Não sei se está definido na documentação é o quão confiável é (para prova futura). Mas funciona!
Editar : se você encontrar o seletor dentro do evento, o ideal é que essa informação faça parte do próprio evento e não do elemento, porque um elemento pode ter vários eventos de clique atribuídos por meio de vários seletores. Uma solução seria usar um wrapper para adicionar eventos
bind()
,click()
etc. , em vez de adicioná-los diretamente.O seletor está sendo passado como uma propriedade de objeto chamada
selector
. Acesse comoevent.data.selector
.Vamos tentar em alguma marcação ( http://jsfiddle.net/DFh7z/ ):
Isenção de responsabilidade : lembre-se de que, assim como
live()
acontece com os eventos, a propriedade do seletor pode ser inválida se métodos de travessia do DOM forem usados.O código a seguir NÃO funcionará, pois
live
depende da propriedade selector que, neste caso, éa.parent()
- um seletor inválido.Nosso
addEvent
método irá disparar, mas você também verá o seletor errado -a.parent()
.fonte
No Such jQuery Method Exists
Em colaboração com @drzaus, criamos o seguinte plugin jQuery.
jQuery.getSelector
Javascript Minificado
Uso e truques
Fiddle com testes QUnit
http://jsfiddle.net/CALY5/5/
fonte
$.map
* Delimitador opcional (precisa remover estranhos tagNames vazios) * você não precisa verificarhasOwnProperty
em umforeach
loop para ser seguro?' > '
faria com que ele não retornasse o seletor do elemento.Você tentou isso?
fonte
*
seletor, é muito lento!Eu lancei um plugin jQuery: jQuery Selectorator , você pode obter um seletor como este.
fonte
Experimente isto:
fonte
Basta adicionar uma camada sobre a função $ desta forma:
Agora você pode fazer coisas como
e retornará "a" mesmo nas versões mais recentes do jQuery.fonte
http://www.selectorgadget.com/ é um bookmarklet projetado explicitamente para este caso de uso.
Dito isso, concordo com a maioria das outras pessoas em que você deve apenas aprender os seletores de CSS sozinho, tentar gerá-los com código não é sustentável. :)
fonte
Eu adicionei algumas correções à correção de @jessegavin.
Isso retornará imediatamente se houver um ID no elemento. Também adicionei uma verificação de atributo de nome e um seletor enésimo filho, caso um elemento não tenha id, classe ou nome.
O nome pode precisar de escopo caso haja vários formulários na página e tenham entradas semelhantes, mas eu não tratei disso ainda.
fonte
Eu estava recebendo vários elementos mesmo após as soluções acima, então estendi o trabalho do dds1024, para um elemento dom ainda mais preciso.
ex: DIV: enésima criança (1) DIV: enésima criança (3) DIV: enésima criança (1) ARTIGO: enésima criança (1) DIV: enésima criança (1) DIV: enésima criança (8) DIV : enésima criança (2) DIV: enésima criança (1) DIV: enésima criança (2) DIV: enésima criança (1) H4: enésima criança (2)
Código:
fonte
Isso pode levar você ao caminho do seletor do elemento HTML clicado -
fonte
Bem, eu escrevi este plugin jQuery simples.
Isso verifica o id ou o nome da classe e tenta fornecer o seletor mais exato possível.
fonte
Você está tentando obter o nome da tag atual que foi clicada?
Se sim, faça isso ..
Você realmente não pode obter o "seletor", o "seletor" no seu caso é
*
.fonte
Código Javascript para o mesmo, caso alguém precise, conforme eu precisei. Esta é apenas a tradução apenas da resposta selecionada acima.
fonte
Levando em conta algumas respostas lidas aqui, gostaria de propor o seguinte:
Talvez seja útil para criar um plugin jQuery?
fonte
Obrigado p1nox!
Meu problema era colocar o foco novamente em uma chamada ajax que estava modificando parte do formulário.
Eu só precisava encapsular sua função em um plugin jQuery:
fonte
Isso não mostrará o caminho do DOM, mas produzirá uma representação de string do que você vê, por exemplo, no depurador do cromo, ao visualizar um objeto.
https://developer.chrome.com/devtools/docs/console-api#consolelogobject-object
fonte
E se:
Não acredito que o jQuery armazene o texto do seletor que foi usado. Afinal, como isso funcionaria se você fizesse algo assim:
fonte
$('div').find('a').selector
édiv a
. Se os eventos não forem criados por meio das funções jQuery, mas por um wrapper, acredito que o seletor pode ser passado como os argumentos de dados para o manipulador de eventos.A melhor resposta seria
fonte