Czy istnieje alternatywa dla jQuery / sizzle, która obsługuje textNodes jako obywatele pierwszej klasy w selektorach?

Odkryłem, że potrzebuję selektorów z pełną obsługą DOMtextNodes, których nie zapewnia jQuery.

jQuery ignoruje węzły tekstowe, prawdopodobnie dlatego, że większość stron ma tony nieistotnych pustych między tagami, które różne przeglądarki mogą traktować inaczej.

Większość odpowiedzi na pytania jQuery dotyczące węzłów tekstowych sprowadza się do używania.contents() funkcja, która zwraca wszystkie węzły potomne dla wybranych elementów, w tym węzły tekstowe - wszystkie inne API jQuery ignorują węzły tekstowe.

Często nie potrzebujesz czegoś, czego nie można łatwo zbudować.contents() ale znalazłem się w takiej sytuacji.

Mój przypadek użycia polega na tym, że chcę zlokalizować, a następnie zawijać dowolne fragmenty tekstu na stronach internetowych innych firm, nad którymi nie mam kontroli. (Pomyśl o rozszerzeniu przeglądarki lub opisie użytkownika).

Do tej pory chętnie chodziłem po modelu DOM szukając wszystkich węzłów tekstowych lub znajdując element opakowujący, który zawiera wszystkie interesujące mnie węzły tekstowe i używam.contents() iterować przez nie.

Ale teraz odkryłem, że czasami potrzebuję pełnej mocy selektorów jQuery / sizzle, aby zawęzić moją uwagę do pewnych możliwości klas w klasach itp.

Rozważałem sposoby rozszerzenia jQuery za pomocątextNode selektor, ale wydaje się to niemożliwe ze względu na wszechobecną zasadę ignorowania węzłów tekstowych, które filtrowałyby wiele z nich przed wywołaniem mojego rozszerzenia.

Dlatego szukam jakiegoś innego narzędzia JavaScript, które oferuje coś w rodzaju selektorów, ale pozwala na wybranie węzłów tekstu dowolnie zmieszanych w jego składni wyrażeń selektora.

Oto przykład tego, co muszę zrobić:

$('.ii:even > div > TXT, .ii:even > div > div.im > TXT')

Oto przykład, którego osobiście jeszcze nie potrzebowałem, ale mogę sobie łatwo wyobrazić:

$('#something .somethingElse TXT')

Kiedy możesz zaadresować (wybrać) bezpośrednich rodziców (ów) z textNodes, iterując nad ich.contents() jest łatwe, nie tak, gdy można zidentyfikować tylko jakiegoś arbitralnego przodka, ale chcesz, aby wszystkie węzły tekstowe znajdowały się poniżej, co jest oczywiście trywialne dla węzłów elementów.

questionAnswers(1)

yourAnswerToTheQuestion