Ich möchte markieren Text von Jquery, aber ich kann es nicht mehr herausfinden. Eigentlich habe ich HTML-Element von API, wenn ich im Eingabefeld suchen. Aber es ist Rückkehr mit HTML-Tag als Antwort enthalten, so dass ich nicht hightlight html tag
will. Ich möchte nur den Text von dieser API-Antwort hervorheben. Bitte schauen Sie sich unten an, ich möchte nur @dd
von a tag
nur hervorheben.Markieren Sie Text aus verschachtelten HTML?
var fromAPI = '<p><span data-email="[email protected]" data-id="24" data-label="@dd" class="mention"><a>@dd</a></span> </p>';
var search = "@dd";
var final = hl(fromAPI);
function hl(p) {
if(/<[a-z][\s\S]*>/i.test(p)) {
p = $(p).attr('id','ddd');
p = $(p).html($(p)[0].outerHTML);
hl(p);
} else {
var pattern = new RegExp("("+search+")","gi");
p = $(p).html().replace(pattern, "<mark>$1</mark>");
$(p).html($(p)[0].outerHTML);
}
return p;
}
console.log($(final).html());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
tatsächliche Ergebnis:
<p id="ddd"><span data-email="[email protected]" data-id="24" data-label="@dd" class="mention"><a>@dd</a></span> </p>
Erwartetes Ergebnis:
<p id="ddd"><span data-email="[email protected]" data-id="24" data-label="@dd" class="mention"><a><mark>@dd</mark></a></span> </p>
Hey Wenn mein Suchwort 'dd' ist, kann dies auch mein HTML-Attribut ändern! Ich will das nicht .. –
Das ist Teil Ihrer eigenen Regex, sowieso ... um es zu beheben, könnten Sie [^ "] zu Ihrer Regex hinzufügen. Siehe hier: https://jsfiddle.net/qg6ffpLg/1/ – Boratzan