7
votes

Corps de recherche pour la chaîne puis style

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 : contenir mais uniquement sur une base individuelle. Je dois être capable de passer à travers les ancres, énumère les divs, etc. xxx

aucune idée serait appréciée.

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. xxx


3 commentaires

$ (": 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é & Je peux le faire en utilisant: contenir uniquement sur une base individuelle. Je dois pouvoir passer à travers les ancres, répertorie les divs, etc. mais enveloppant E.g div dans B 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 , mais
BrandName


6 Réponses :


2
votes

<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 &lt;b&gt; tag <b>bold Brand Name actually</b></p>
  <code>This is a code tag with a Brand Name :)</code>
</div>


0 commentaires

1
votes

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: xxx

} < / p>

remplaturbrand (nom de marque ', «nouvelle marque»);


0 commentaires

2
votes

Si votre code fonctionne, ajoutez simplement une première ligne de code similaire:

this.nodeValue.wrap( "<span class='new'></span>" );


0 commentaires

3
votes

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>


0 commentaires

2
votes
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

0 commentaires

1
votes

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>'));
        }
    }
});


1 commentaires

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.