2011-10-12 9 views
6

Muszę znaleźć na stronie HTML wszystkie fragmenty tekstu pasujące do określonego wyrażenia regularnego (to znaczy, muszę zignorować tagi, aby '< span>First name: < /span>< br/>< b>John< /b>' pasował do 'First name: John'), a następnie podświetlić znalezione fragmenty (według dekorowanie nowymi elementami i stosowanie niestandardowych stylów css) i umiejscowienie tych fragmentów, np być w stanie przewinąć je do widoku. Funkcjonalność jest podobna do tego, co robi wtyczka przeglądarki Skype z numerami telefonów znalezionymi na stronie.Znajdź element DOM zawierający ciąg zgodny z wyrażeniem regularnym

+7

Czy masz kod, który nie działa, czy jest to pytanie "daj mi teh codez"? Co próbujesz? – CanSpice

+0

Muszę znaleźć podejście, mogę zrobić kodowanie. Jeśli jego rozwiązanie i kod są już dostępne - jeszcze lepiej. –

+0

Wygląda na to, że jQuery może to zrobić za pomocą selektora: contains(). może jego logika może zostać ponownie zdefiniowana, aby użyć wyszukiwania regexp zamiast wyszukiwania podłańcuchowego. –

Odpowiedz

-1

Czy próbowałeś czegoś takiego?

document.body.innerHTML.replace(/<\/?[^>]+>/g, '')

+1

To nie tylko zniszczy każdy słuchacz, który został dodany dynamicznie, ale prawdopodobnie zepsuje elementy, atrybuty i właściwości na różne sposoby w różnych przeglądarkach dla dowolnej strony z nietrywialną treścią. – RobG

+0

Potrzebuję zachować informacje o tym, gdzie w DOM moje wyniki wyszukiwania znajdują się, lub mogę zrobić document.body.innerText.match() - nie to, czego potrzebuję. –

2

Można też rekurencyjnie schodzić DOM patrząc na textContent lub innerText nieruchomość (odpowiednio) elementów, lub użyć pętli nad kolekcji zwrócony przez getElementsByTagName. Tak czy inaczej, gdy już zidentyfikujesz tekst i element nadrzędny, musisz dowiedzieć się, jak go zastąpić.

Jakie są Twoje wymagania dotyczące struktury dokumentu w zamienniku, jeśli ciąg jest podzielony na jeden lub więcej elementów?

+0

Powiedziałbym, że przy użyciu podejścia skoncentrowanego na węźle, a skoncentrowanego na łańcuchach, zapewni się większą przenośność. Poza tym jest to aspekt DOM, z którym większość ludzi ma problem z :). –

+0

Tak, ale OP chce łańcucha, nawet jeśli jest podzielony na więcej niż jeden element, więc samo spojrzenie na węzły tekstowe nie wykona zadania. Nie wiem, jak zamierza radzić sobie z rozszczepionymi łańcuchami, ale przynajmniej powyższa metoda znajdzie najbliższego przodka, który ma cały ciąg. – RobG

2

Można użyć jQuery selectors uzyskać <b> tagi zawierające John które przychodzą po <span> znacznikiem, który zawiera First name:, a następnie na przykład zastosować styl:

$("span:contains('First name:') ~ b:contains('John')").css('color','red'); 

Oto uruchomiony przykład: http://jsfiddle.net/XzwNj/

+0

To był tylko przykład, a nie konkretny przypadek –

Powiązane problemy