J'ai besoin de chercher dans un document avec JQuery pour trouver un mot particulier. C'est en fait un nom de marque qui doit être audacieux et en italique partout où utilisé.
Je peux faire cela en utilisant aucune idée serait appréciée. P> mise à jour:
Je suis aussi loin que cela fonctionne et remplace tout sur une page, mais j'ai maintenant besoin d'envelopper une classe avec une classe. Si proche mais soulevé sur celui-ci. Encore une fois, une idée serait appréciée. P> : contenir code> mais uniquement sur une base individuelle. Je dois être capable de passer à travers les ancres, énumère les divs, etc. p>
6 Réponses :
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div> <h1>Title with Brand Name!</h1> <p> Change styles only to Brand Name!<br> but don't mess with <a href="#">links to Brand Name are cool</a><br> <button>Button with Brand Name works!</button> </p> <ul> <li>Other Brand</li><li>Brand Name</li><li>Brandy</li> </ul> </div> <div> <h2>Subtitle <i>and italic Brand Name</i></h2> <p>The HTML will not get messed cause of Brand Nameing<br> Paragraph with a <b> tag <b>bold Brand Name actually</b></p> <code>This is a code tag with a Brand Name :)</code> </div>
Ma solution est un peu différente de la précédente mais dans tous les cas toujours valable, je suppose.
Dans la fonction suivante ma fonction de jQuery: p> } < / p> remplaturbrand (nom de marque ', «nouvelle marque»); p> p>
Si votre code fonctionne, ajoutez simplement une première ligne de code similaire:
this.nodeValue.wrap( "<span class='new'></span>" );
Vous pouvez remplacer les notnodes avec un fragment de document. Cela vous permet de regrouper des nœuds de texte et de style et de l'échanger avec la nonction de texte existante.
p>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <p> Hello world this is my brandname. The BrAnDNAMe is regex matched and we can change subelements like "<a href=''>Brandname</a>." It should not replace <b>elements</b> that don't match. </p>
var rgx_BRAND = /(foo)/ig; $("*") .contents() .filter(function() { return this.nodeType === Node.TEXT_NODE && this.textContent.search(rgx_BRAND) > -1; }) .each(function(){ var html = this.textContent.replace(rgx_BRAND, '<b class="-my-brand">$1</b>'); $(this).before(html).remove(); }); Hope this helps, Cheers
Aller de votre extrait:
$(function() { var parent, needle = 'brandname', regex = new RegExp(needle, 'g'); $("body *").contents().each(function() { if(this.nodeType==3 && ((parent = $(this.parentNode)).length > 0) { parent.html(parent.html().replace( regex, '<span class="brand-name">' + needle + '</span>')); } } });
Soyez prudent, cela remplacera également les noms de classe ou d'autres valeurs d'attribut dans le parent qui correspondent à la marque de marque. C'est probablement pourquoi NODEVALUE a été utilisé par l'OP.
$ (": contient (" nom de marque ")") retournera tous les éléments.
C'est en fait un nom de marque qui doit être audacieux et italique partout où utilisé code> & b>
Je peux le faire en utilisant: contenir uniquement sur une base individuelle. Je dois pouvoir passer à travers les ancres, répertorie les divs, etc. code> mais enveloppant E.g
div code> dans
B code> n'est pas valide marquage HTML. Pas vraiment clair ce que vous attendez?
@ A.Wolff - attend la parole et que le mot « BrandName » à envelopper dans une période dans tous les cas. Non BrandName div> span>, mais BrandName span> div>