Contenido

6 trucos javascript que podemos hacer con jQuery

13 Oct

+ 6

Johann Burkard ha recopilado 6 trucos que podemos hacer usando jQuery y que podremos llegar a usar alguna vez.

1) Buscar texto en la página

$.fn.egrep = function(pat) {
 var out = [];
 var textNodes = function(n) {
  if (n.nodeType == Node.TEXT_NODE) {
   var t = typeof pat == 'string' ?
    n.nodeValue.indexOf(pat) != -1 :
    pat.test(n.nodeValue);
   if (t) {
    out.push(n.parentNode);
   }
  }
  else {
   $.each(n.childNodes, function(a, b) {
    textNodes(b);
   });
  }
 };
 this.each(function() {
  textNodes(this);
 });
 return out;
};

Como podemos ver, mediante una pequeña extensión, dotamos a jQuery de la capacidad de buscar texto en nuestra aplicación. Simplemente tendremos que usar  $.egrep(TEXTO); para que nos devuelva los elementos que la contienen. Veamos un ejemplo:

var anietos = $('body').egrep(/anieto2k/i);
for (var x in anietos) {
	anietos[x].css("backgroundColor", "yellow");
}

2) Filtrando con case-insensitive

var pattern = /exp/i;
$('#id').filter(function() {
 return pattern.test($(this).text());
});

Con filter() podemos filtrar la colección de nodos devueltos por una consulta en jQuery y mediante el uso del código anterior, podemos hacer que nos encuentre el texto que pasamos como pattern a dicha función. Veamos un ejemplo.

var pattern = /anieto2k/i;
var anietos = $("#content p").filter(function(){
	return pattern.test($(this).text());
}).wrap('<strong></strong>');

3) Reducir el tamaño de jQuery.min.js

Nos muestra el propio Johann las pruebas que ha hecho para reducir el tamaño de jQuery con alternativas a /packer/ de Dean Edwars.

4) Logea el tiempo de carga de la página

<html>
<head>
<script type="text/javascript">
var t = new Date();
</script>
… (your page) …
<script type="text/javascript">
new Image().src = '/load.gif?' + (new Date().getTime() - t.getTime());
</script>
</body>
<html>

Una interesante prácticas que nos puede aportar información acerca del tiempo de carga de nuestra página para todos los usuarios que la visiten. Se basa en la carga de una imagen mediante Javascript (no necesariamente jQuery) y que nos contabilizará el tiempo transcurrido entre la declaración de t y la carga de la imagen.

5) Recargando un iframe

$('#iframe').each(function() {
 this.contentWindow.location.reload(true);
});

Accediendo al elemento contentWindow, podemos hacer uso de location y así recargar la página contenida dentro del <iframe />.

6) Ejecutar código al cargar un iframe

$('#iframe').load(function() {
 // do something
});

Al igual que la página actual, con jQuery podemos añadir una funcionalidad que se activará al acabar de cargar el contenido de un <iframe />. Algo muy útil para no acceder al contenido del mismo sin que este esté completamente cargado.

Hola !! Gracias por la sugerencia, he utilizado el primer script para mi nuevo proyecto llamado http://www.galaxiacocina.com . Está puesto en la nube de tags, además he modificado la función un poco para que borre las palabras previamente seleccionadas tambien.

Gracias!! Felicidades por el blog que se aprende mucho!

Por cierto, Explorer 7 casca (ninguna novedad). ¿Alguien sabe si es cosa del jquery o fallo del script? Me da este error: “Node no está definido”…

Gracias!

El codigo para recargar un iframe no me funciona, se queda ciclado el recargar .. alguna otra manera ?

En el truco de buscar texto en la página, estoy intentando que

var anietos = $(’body’).egrep(/anieto2k/i);

/anieto2k/i sea el contenido de un input, pero no me lo hace bien, como se podría pasar el value de un input?

Gracias

El truco “6) Ejecutar código al cargar un iframe” no se puede realizar con una pagina en vez de un iframe???? ya que tarda un poco la pagina, y necesito mostrarle un mensaje al usuario….

Hola.. Muy buenas sugerencias..
Agradecería mucho que me ayudaras con mi problema que es que cargo un iframe ( que esta acá: http://www.sudogo.com/sudoku/sudoku_for_your_website.php ) y despues intento cambiarle las imagenes de fondo a las etiquetas que aparecen, pero
le pongo el id=”sudoku” y la class=”sudoku” al iframe y uso tu sugerencia 6) pero no funciona.. alguna idea de como resolverlo?

Comentar

#

Me reservo el derecho de eliminar y/o modificar los comentarios que contengan lenguaje inapropiado, spam u otras conductas no apropiadas en una comunidad civilizada. Si tu comentario no aparece, puede ser que akismet lo haya capturado, cada día lo reviso y lo coloco en su lugar. Siento las molestias.