ejemplo javascript href getelementsbytagname

ejemplo - Javascript getElement por href?



getelementsbytagname (2)

Actualización 2016

Han pasado más de 4 años desde que se publicó esta pregunta y las cosas progresaron bastante.

No puedes usar:

var els = document.getElementsByTagName("a[href=''http://domain.com'']");

pero lo que puedes usar es:

var els = document.querySelectorAll("a[href=''http://domain.com'']");

( Nota: ver más abajo para soporte de navegador)

lo que haría que el código de su pregunta funcionara exactamente como espera :

for (var i = 0, l = els.length; i < l; i++) { var el = els[i]; el.innerHTML = el.innerHTML.replace(/link1/gi, ''dead link''); }

Incluso puedes usar selectores como a[href^=''http://domain.com''] si quieres todos los enlaces que comiencen con ''http://domain.com'' :

var els = document.querySelectorAll("a[href^=''http://domain.com'']"); for (var i = 0, l = els.length; i < l; i++) { var el = els[i]; el.innerHTML = el.innerHTML.replace(/link/gi, ''dead link''); }

Ver: DEMO

Soporte del navegador

El soporte del navegador según Can I use a partir de junio de 2016 se ve bastante bien:

(Consulte: http://caniuse.com/queryselector para obtener información actualizada)

No hay soporte en IE6 e IE7, pero IE6 ya está muerto e IE7 pronto estará con su participación de mercado del 0,68% .

IE8 tiene más de 7 años y es parcialmente compatible con querySelectorAll. Por "parcialmente" quiero decir que puede usar selectores de CSS 2.1 como [attr] , [attr="val"] , [attr~="val"] , [attr|="bar"] y un pequeño subconjunto de selectores de CSS 3 que afortunadamente incluyen: [attr^=val] , [attr$=val] y [attr*=val] por lo que parece que IE8 está bien con mis ejemplos anteriores.

IE9 , IE10 e IE11 son compatibles con querySelectorAll sin problemas, al igual que Chrome , Firefox , Safari , Opera y todos los demás navegadores principales, tanto de escritorio como móviles .

En otras palabras, parece que podemos comenzar a usar de forma segura querySelectorAll en producción.

Más información

Para más información, ver:

Consulte también esta respuesta para conocer la diferencia entre querySelectorAll , querySelector , queryAll y query y cuándo se eliminaron de la especificación DOM .

Tengo el guion abajo

var els = document.getElementsByTagName("a"); for(var i = 0, l = els.length; i < l; i++) { var el = els[i]; el.innerHTML = el.innerHTML.replace(/link1/gi, ''dead link''); }

Sin embargo, esto busca en la página y tarda unos 20 segundos en hacerlo, ya que hay MUCHOS enlaces.

Sin embargo, solo necesito apuntar a las a que tienen un href específico, por ejemplo. "http://dominio.com/"

Así que, idealmente, me gustaría poder hacer esto de manera similar a jQuery, pero sin usar un marco. Así que algo como

var els = document.getElementsByTagName("a[href=''http://domain.com'']");

¿Cómo haría esto para que solo busque los objetos con ese href coincidente?


La lectura y escritura de la propiedad innerHTML en cada elemento es probablemente bastante costosa y, por lo tanto, causa su ralentización: obliga al navegador a "serializar" el elemento, que luego ejecuta a través de una expresión regular, y luego "deserializar" de nuevo. Peor aún, lo estás haciendo para cada elemento, incluso si no coincide.

En su lugar, intente mirar directamente las propiedades del elemento a:

var els = document.getElementsByTagName("a"); for (var i = 0, l = els.length; i < l; i++) { var el = els[i]; if (el.href === ''http://www.example.com/'') { el.innerHTML = "dead link"; el.href = "#"; } }

EDICIÓN en navegadores modernos con mucha mayor conformidad con W3C, ahora puede usar document.querySelectorAll() para obtener de manera más eficiente solo los enlaces que desea:

var els = document.querySelectorAll(''a[href^=http://www.example.com/]''); for (var i = 0, l = els.length; i < l; i++) { els[i].textContent = ''dead link''; els[i].href = ''#''; }

Sin embargo, esto no es tan flexible si hay varios nombres de dominio que desea hacer coincidir o, por ejemplo, si desea hacer coincidir http: y https: al mismo tiempo.