2011-08-08 21 views
29

Después de leer este artículo net.tutsplus.com/tutorials/javascript-ajax/14-helpful-jquery-tricks-notes-and-best-practices/ llegué a la conclusión de que el uso de this.href es más eficiente.

Sin embargo, cuando traté de usarlo en uno de mis proyectos, vi que this.href devuelve no solo href sino que también agrega una url de un sitio web. Por ejemplo <a href="tab-04"></a>this.href devolverá http://example.com/abc/tab-04 y $ (this) .attr ('href') devolverá solo la pestaña-04.

Puede ver un ejemplo aquí http://jsfiddle.net/UC2xA/1/.

$ (esto) .attr ('href') sin embargo, devuelve exactamente lo que necesito y nada más.

Mi pregunta es, ¿cómo puedo volver a escribir (o lo que sea necesario) this.href de modo que sólo volvería pestaña-04?

EDITAR

Doug que están justo en el dinero con

this.getAttribute('href')

+4

Si desea que el valor exacto del atributo 'href' (el que está codificado en el código fuente HTML), luego use' $ (this) .attr ('href') '. si quiere la URL completa, use 'this.href'. –

+0

Si va a usar this.href por su eficacia y luego reescríbalo para que 'haga más'; este tipo derrota el propósito. – Joey

+0

-1 para "Llegué a la conclusión de que el uso de this.href es más eficiente". No, en realidad no, pero ciertamente está [optimizando demasiado pronto] (http://en.wikipedia.org/wiki/Program_optimization#When_to_optimize). Las probabilidades de que el supuesto cambio en la eficiencia, si es que existe, serían detectables son casi nulas. – Malvolio

Respuesta

51

La propiedad href en JavaScript plano tendrá la semántica adjunta. Devuelve la URL de destino a la que conducirá el enlace. No importa cómo se escribió (URL absolutas o relativas).

Cuando utiliza $(this).attr("href"), está recuperando directamente el valor del atributo href como cualquier otro atributo, por lo que devolverá el valor exacto representado en el HTML.

Para su caso, entonces, es mejor utilizar $(this).attr("href")

Si no desea utilizar jQuery, no hay otra solución, utilizando simplemente JavaScript:

this.getAttribute('href') 
1

document.getElementById(yourAnchorId).href.split("/")

[document.getElementById(yourAnchorId).href.split("/").length - 1].split("?")[0];

+0

Hola, Brian, no puedo hacer que tus cosas funcionen, pero, ¿podrías proporcionar un enlace a jsbin o a jsfiddle, para ver cómo lo has hecho? – user000001

+0

@ user744184 - Fiddle: http://jsfiddle.net/Yu7Q2/3/ – Brian

1

qué pero un poco subcadena?

por ejemplo:

function getHref(a) 
{ 
    var i = a.outerHTML.indexOf('href="')+6; 
    return a.outerHTML.substring(i, a.outerHTML.indexOf('"', i)); 

} 

P.S probado!

+0

Yonathan Garti, ¿podría proporcionar un enlace a jsbin o a jsfiddle, así que vería cómo lo ha hecho? Porque parece que no puedo hacer que tus cosas funcionen. Aún no al menos. – user000001

+0

http://jsbin.com/ajulaj - haga clic en "probarme" – ygaradon

+1

pero me gusta la solución @Doug !!! – ygaradon

Cuestiones relacionadas