2016-07-14 5 views
-4

Ich muss eine Funktion schreiben, die ein Wort als arg, finden Sie es in einer Zeichenfolge, und markieren Sie das Wort nur mit jquery/js.Jquery - Finden Sie ein Wort in einer Zeichenfolge und wickeln Sie es mit <span> Tag

jsfiddle.net/xzh2qmcd/ 

im bereits das Wort erhalten und die indexOf hier, aber ich weiß nicht, wie man eine der Span-Tag nur hinzuzufügen, wo dieses Wort erscheinen.

jede Hilfe, die wir gut sein, ich überprüfe einige andere Fragen hier und kann nicht verstehen, was ich tun sollte.

+1

aus dem [Hilfe] (http://stackoverflow.com/help/on- Thema): Fragen, die Debug-Hilfe suchen (" Warum funktioniert dieser Code nicht? ") muss das gewünschte Verhalten, ein spezifisches Problem oder einen Fehler und den kürzesten Code enthalten, der notwendig ist, um es ** in der Frage selbst zu reproduzieren **. – JDB

+1

Offensichtlich wussten Sie das, obwohl Sie Ihren jsfiddle Link als Code formatiert haben, um diese Anforderung zu umgehen. – JDB

+0

(string, word) => string.replace (Wort, (w) => ' $ {w}') – floribon

Antwort

1

Sie müssen dies tun:

var txt = textDiv.replace(new RegExp(searchInput, 'gi'), function(str) { 
     return "<span class='highlight'>" + str + "</span>" 
    }); 

oder

var txt = textDiv.replace(
        new RegExp(searchInput, 'gi'), 
        "<span class='highlight'>$&</span>"); 

gi-> alle Groß- und Kleinschreibung passenden Text

$(document).ready(function() { 
 
    // globals 
 
    var searchInput; 
 
    var textDiv; 
 

 
    $('.searchBtn').click(function(event) { 
 

 
    event.preventDefault(); 
 

 
    // set the values of the search and the text 
 
    searchInput = $('.searchInput').val(); 
 
    textDiv = $('.textDiv').text(); 
 
    var reg = new RegExp(searchInput, 'gi'); 
 
    var txt = textDiv.replace(reg, function(str) { 
 
     return "<span class='highlight'>" + str + "</span>" 
 
    }); 
 
    $('.textDiv').html(txt); 
 
    }); 
 
});
.textDiv { 
 
    height: 100px; 
 
    width: 500px; 
 
    text-align: center; 
 
    padding: 20px; 
 
    margin: 0 auto; 
 
} 
 

 
.highlight { 
 
    background: yellow; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div class="container"> 
 
    <div class="main"> 
 
    <div class="searchDiv"> 
 
     <h3> Mask A Word In The Text: </h3> 
 
     <label> 
 
     <input class="searchInput" type="text" value = "iS"/> </label> 
 
     <button class="searchBtn" type="button"> Search </button> 
 
    </div> 
 

 
    <div class="textDiv"> 
 
     Bastille Day is the common name given in English-speaking countries to the French National Day, which is celebrated on 14 July each year. In France, it is formally called La fête nationale (French pronunciation: ​[la fɛːt nasjɔnal]; The National Celebration) IS Is 
 
     and commonly Le quatorze juillet. (French pronunciation: ​[lə katɔʁz(ə) ʒɥijɛ]; the fourteenth of July). 
 
    </div> 
 
    </div> 
 
</div>

+0

Downvote, zu erklären? –

+0

Ich habe nicht downvote, aber verwendet eine Funktion für den Ersatzwert nicht komplizierter als es sein muss? Sie können einfach einen String verwenden: '" $ & "'. – nnnnnn

+0

@nnnnnn Sie haben Recht, ich habe das in meiner Antwort hinzufügen. Die Funktion hingegen zeigt deutlich, was vor sich geht. und am besten zu lernen. –

0

können Sie die gewünschten mit dem untenstehenden Code erreichen.

Ich habe meine Antwort aktualisiert, um eine vollständige Übereinstimmung zu bieten. Ich denke, du wirst nur danach suchen.

Beispiel: Wenn Sie nationale dann suchen sie nationale Wort nicht Farbe sollte, was, wenn Sie nicht für eine vollständige Wortsuche gehen passieren wird.

// search for the input in the paragraph 
     if (textDiv.toLowerCase().indexOf(searchInput.toLowerCase()) >= 0) { 
     console.log("match"); 
     textDiv = textDiv.replace(new RegExp('\\b('+searchInput+')\\b', 'gi'),'<span class="highlight">$1</span>'); 


     $('.textDiv').html(textDiv); 

Fiddle: http://jsfiddle.net/xzh2qmcd/3/

+0

Jemand, der gewählt wurde? Könnten Sie mir den Grund wissen lassen? – Deep

+0

Nur eine Schätzung auf dem Downvote ... siehe [Easy Money] (http://meta.stackoverflow.com/a/251488/211627). Antworten auf Off-Topic-Fragen werden häufig abgelehnt (http://meta.stackexchange.com/q/194963/191410). – JDB

+0

@JDB: OK, ich dachte, es gibt einen Fehler in der Antwort, den ich nicht sehen konnte. Wenn Sie jedoch einen Blick auf das mitgelieferte Fidel-OP werfen, hat OP selbst etwas versucht, ist aber beim Ersetzen der gesamten Welt in der HTML-Zeichenfolge stecken geblieben. – Deep

0

$(document).ready(function() { 
 
    // globals 
 
    var searchInput; 
 
    var textDiv; 
 

 
    $('.searchBtn').click(function(event) { 
 

 
     event.preventDefault(); 
 

 
     // set the values of the search and the text 
 
     searchInput = $('.searchInput').val(); 
 
     textOfDiv = $('.textDiv').text(); 
 

 
     // search for the input in the paragraph 
 
     if (textOfDiv.indexOf(searchInput) >= 0) { 
 
     console.log("match"); 
 
\t \t \t \t \t var newText = textOfDiv.split(searchInput).join('<span class="highlight">' + searchInput + '</span>'); 
 
$('.textDiv').html(newText); 
 
} 
 
     else { 
 
     console.log("no match"); 
 
     } 
 
    }); 
 
});
.textDiv { 
 
    height:100px; 
 
    width:500px; 
 
    text-align:center; 
 
    padding:20px; 
 
    margin:0 auto; 
 
} 
 

 
.highlight { 
 
    background:red; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="container"> 
 
    <div class="main"> 
 
     <div class="searchDiv"> 
 
        <h3> Mask A Word In The Text: </h3> 
 
        <label> <input class="searchInput" type="text" /> </label> 
 
        <button class="searchBtn" type="button"> Search </button> 
 
     </div> 
 

 
     <div class="textDiv"> 
 
       Bastille Day is the common name given in 
 
       English-speaking countries to the French National Day, 
 
       which is celebrated on 14 July each year. In France, 
 
       it is formally called La fête nationale (French pronunciation: ​[la fɛːt nasjɔnal]; The National Celebration) 
 
       and commonly Le quatorze juillet. 
 
       (French pronunciation: ​[lə katɔʁz(ə) ʒɥijɛ]; the fourteenth of July). 
 
     </div> 
 
    </div> 
 
</div>

$(document).ready(function() { 
 
    // globals 
 
    var searchInput; 
 
    var textDiv; 
 

 
    $('.searchBtn').click(function(event) { 
 

 
     event.preventDefault(); 
 

 
     // set the values of the search and the text 
 
     searchInput = $('.searchInput').val(); 
 
     textOfDiv = $('.textDiv').text(); 
 

 
     // search for the input in the paragraph 
 
     if (textOfDiv.toLowerCase().indexOf(searchInput) >= 0) { 
 
     console.log("match"); 
 
\t \t var newText = textOfDiv.split(searchInput).join('<span class="highlight">' + searchInput + '</span>'); 
 
$('.textDiv').html(newText); 
 
} 
 
     else { 
 
     console.log("no match"); 
 
     } 
 
    }); 
 
});
.textDiv { 
 
    height:100px; 
 
    width:500px; 
 
    text-align:center; 
 
    padding:20px; 
 
    margin:0 auto; 
 
} 
 

 
.highlight { 
 
    background:red; 
 
}
<div class="container"> 
 
    <div class="main"> 
 
     <div class="searchDiv"> 
 
        <h3> Mask A Word In The Text: </h3> 
 
        <label> <input class="searchInput" type="text" /> </label> 
 
        <button class="searchBtn" type="button"> Search </button> 
 
     </div> 
 

 
     <div class="textDiv"> 
 
       Bastille Day is the common name given in 
 
       English-speaking countries to the French National Day, 
 
       which is celebrated on 14 July each year. In France, 
 
       it is formally called La fête nationale (French pronunciation: ​[la fɛːt nasjɔnal]; The National Celebration) 
 
       and commonly Le quatorze juillet. 
 
       (French pronunciation: ​[lə katɔʁz(ə) ʒɥijɛ]; the fourteenth of July). 
 
     </div> 
 
    </div> 
 
</div>