2012-01-23 12 views
6

Tengo una página web como esta:eliminar ciertas palabras de los párrafos usando jQuery

<p class="author">By ... on Jan 23, 2012</p> 
<p class="content">(some content)</p> 

<p class="author">By ... on Jan 23, 2012</p> 
<p class="content">(some content)</p> 

<p class="author">By ... on Jan 23, 2012</p> 
<p class="content">(some content)</p> 

... 

me gustaría usar jQuery para eliminar las palabras "por" y "en" de p.author, el resultado sería se:

<p class="author">... Jan 23, 2012</p> 
<p class="content">(some content)</p> 
... 

Gracias!

+2

no sé nada sobre el contexto de esta situación, pero ¿no sería mejor hacer esto en el servidor mediante la alteración de lo código que utiliza para sacar esto de una base de datos (o de otra fuente)? – Bojangles

Respuesta

2
$(".author").each(function(){ 
    var text = this.firstChild.nodeValue; 
    this.firstChild.nodeValue = text.replace(/(^By|\bon\b)/g, ""); 
}); 
8
$('.author').each(function(){ 
$(this).text($(this).text().replace(/on|by/g,"")) 
}); 
+3

Dentro del bucle 'each'' this' apunta al elemento 'DOM'. Por lo tanto, primero debe crear un objeto jQuery antes de llamar al método 'text'. – ShankarSangoli

+0

buscándolo ahora en la documentación de jquery. – bigblind

+0

sí, tienes razón. Aunque es extraño, porque cuando haces un plugin de jquery, tu función obtiene una instancia de jquery. Mi intuición sería que todas las demás funciones que manejan elementos DOM también tendrían una. – bigblind

2

No hay necesidad de each adicional:

$("p.author").text(function() { 
    return $(this).text().replace(/(By|on)/g, ''); 
}); 
+0

Hay 2 'eaches' implícitos allí sin mucho ahorro en el código – Esailija

+0

Tienes razón, claro. Pero prefiero usar las oportunidades que ofrece jQuery, y si podemos usar 'function' como argumento para' text' - me parece realmente conveniente. – dfsq

Cuestiones relacionadas