Jquery $this ou each() para especificar um link por vez
Pergunta
Estou achando o jQuery muito difícil de aprender, pois parece haver muitas maneiras de escrever a mesma coisa.
Como exercício, gostaria de pegar o texto das tags âncora e colocá-lo no atributo links href.
por exemplo
<a href="">http://www.something.com</a>
tornar-se
<a href="http://www.something.com">http://www.something.com</a>
minha primeira tentativa foi
<script type="text/javascript">
$(document).ready(function() {
var text = $('a').text();
$('a').attr( 'href', text );
});
</script>
o que claramente não funciona, pois preciso especificar para executar esta ação para cada link.
Devo usar um loop foreach?Uma função .each()?Ou $ esta notação?Todos funcionariam?
Solução
$('a').text()
retornaria a combinação de cada valor de texto dos nós âncora.Acabei de fazer isso no stackoverflow e me deu:
"MederLogoutoutFaqQóstionstagsUsersBadgesUnansweredask QuestionJQuery $ ou cada um () para especificar um link em um tempo de realização do seu próprio questionário de reação do seu próprio questionário e unidade de reação ao helicmation. Ontact USFeedback sempre WelComestackOverflow.comserverfault.comsuperuser.commetaHowtoGeek.comdoctype.comcc-wikiattruction necessário "
Portanto, você deve usar jQuery.prototype.each para poder salvar uma referência ao texto de cada âncora individual:
$('a').each(function() {
var text = $(this).text();
$(this).attr('href', text );
});
O benefício adicional é que cada função é executada em seu próprio contexto de execução, cada variável que você define, cada 'texto' declarado é exclusivo para o corpo da função, portanto há um muito mais controle dentro de um .each.
Em relação ao acordo de loop vanilla - eu usaria jQuery.prototype.each porque é uma função de nível superior, você teria que atribuir uma variável ao comprimento do nodeList e começar em 0, parar no comprimento (ou se o pedido não não importa, faça um loop while reverso).isso apenas causa mais trabalho do que o necessário.