Spune-o pagină web are un șir de caractere, cum ar fi "eu sunt un simplu string" pe care vreau să-l găsesc. Cum ar merge despre acest lucru, folosind JQuery?
jQuery are conține metoda. Aici's un fragment pentru tine:
<script type="text/javascript">
$(function() {
var foundin = $('*:contains("I am a simple string")');
});
</script>
Selectorul de mai sus selectează orice element care conține șirul țintă. La găsiteîn va fi un obiect jQuery care conține orice potrivire element. Vezi API informații la: https://api.jquery.com/contains-selector/
Un lucru de remarcat cu '*' wildcard e care le'll obține toate elementele, inclusiv html o elemente de caroserie, care, probabil, nu't vrei. Ca's de ce cele mai multe dintre exemplele de la jQuery și în alte locuri folosi $('div:conține("eu sunt un simplu string")')
În mod normal, jQuery selectoare nu căutare în "noduri text" în DOM. Cu toate acestea, dacă utilizați .conținutul (funcția), noduri text va fi inclus, atunci puteți folosi nodeType proprietatea de a filtra numai noduri text, și nodeValue proprietate pentru a căuta un șir de text.
$('*', 'corpul') .andSelf() .conținutul() .filtru(function(){ întoarcerea asta.nodeType === 3; }) .filtru(function(){ // Se potrivesc numai atunci când conține 'șir de simplu' oriunde în text întoarcerea asta.nodeValue.indexOf('șir de simplu') != -1; }) .fiecare(function(){ // Facem ceva cu asta.nodeValue });
Aceasta va selecta doar elemente de frunze, care conțin "eu sunt un simplu string".
$('*:contains("I am a simple string")').each(function(){
if($(this).children().length < 1)
$(this).css("border","solid 2px red") });
Lipiți următorul în bara de adrese pentru a o testa.
javascript: $('*:contains("I am a simple string")').each(function(){ if($(this).children().length < 1) $(this).css("border","solid 2px red") }); return false;
Dacă doriți să apuca tocmai "eu sunt un simplu string". Primul wrap text într-un element asa.
$('*:contains("I am a simple string")').each(function(){
if($(this).children().length < 1)
$(this).html(
$(this).text().replace(
/"I am a simple string"/
,'<span containsStringImLookingFor="true">"I am a simple string"</span>'
)
)
});
și apoi a face acest lucru.
$('*[containsStringImLookingFor]').css("border","solid 2px red");
Dacă doriți doar nodul cel mai apropiat de textul're în căutarea pentru, ai putea folosi asta:
$('*:contains("my text"):last');
Acest lucru va funcționa chiar și în cazul în care HTML arata astfel:
<p> blah blah <strong>my <em>text</em></strong></p>
Cu ajutorul selectorului de mai sus va găsi ` tag, din moment ce's ultima etichetă care conține întregul șir.
Doar adăugarea la Tony Miller's a raspuns ca acest lucru ma 90% față de ceea ce am fost în căutarea pentru, dar încă n't de lucru. Adăugarea .lungime > 0;
la sfârșitul lui codul primit scenariul meu de lucru.
$(function() {
var foundin = $('*:contains("I am a simple string")').length > 0;
});
această funcție ar trebui să funcționeze. practic face o căutare recursiv până când vom obține o listă separată de noduri frunze.
function distinctNodes(search, element) {
var d, e, ef;
e = [];
ef = [];
if (element) {
d = $(":contains(\""+ search + "\"):not(script)", element);
}
else {
d = $(":contains(\""+ search + "\"):not(script)");
}
if (d.length == 1) {
e.push(d[0]);
}
else {
d.each(function () {
var i, r = distinctNodes(search, this);
if (r.length === 0) {
e.push(this);
}
else {
for (i = 0; i < r.length; ++i) {
e.push(r[i]);
}
}
});
}
$.each(e, function () {
for (var i = 0; i < ef.length; ++i) {
if (this === ef[i]) return;
}
ef.push(this);
});
return ef;
}