W porządku, zastanawiam się, czy jest sposób, aby :contains()
selektor jQuery wybierał elementy tylko z wpisanym ciągiem
na przykład -
<p>hello</p>
<p>hello world</p>
$('p:contains("hello")').css('font-weight', 'bold');
Selektor wybierze oba p
elementy i uczyni je pogrubionymi, ale chcę, aby wybierał tylko pierwszy.
jquery
jquery-selectors
juliański
źródło
źródło
:contains
selektor własnym kodem, ale nie sądzę, że o to Ci chodziło?Odpowiedzi:
Nie, nie ma selektora jQuery (lub CSS), który to robi.
Możesz łatwo użyć
filter
:To nie jest selektor , ale spełnia swoje zadanie. :-)
Jeśli chcesz obsłużyć spacje przed lub po „cześć”, możesz dodać
$.trim
tam znak :W przypadku przedwczesnych optymalizatorów, jeśli nie obchodzi Cię, że nie pasuje
<p><span>hello</span></p>
i jest podobny, możesz uniknąć wywołań$
itext
, używającinnerHTML
bezpośrednio:... ale musiałbyś mieć wiele akapitów, aby miało to znaczenie, tak wiele, że prawdopodobnie najpierw miałbyś inne problemy. :-)
źródło
$.trim
przed dokonaniem porównania pojawił się jakiś zbłąkany biały znak.==
(== 2
), albo umieścić liczbę w ciągu (=== "2"
), ponieważ wartość, z której otrzymujesztext()
lubinnerHTML
jest zawsze ciągiem. Jeśli porównujesz ze stringiem, nie ma znaczenia, czy użyjesz,==
czy===
.:contains
co jest trochę bardziej złożone, ale nie zaimplementowało selektora do dokładnego dopasowania tekstu. = {Spróbuj dodać pseudo funkcję rozszerzającą:
Następnie możesz:
źródło
$.expr[':'].textEquals = $.expr[':'].textEquals || $.expr.createPseudo(function(arg) {
Aby to osiągnąć, możesz użyć funkcji filter () jQuery .
źródło
Więc odpowiedź Amandu w większości działa. Używając go na wolności, napotkałem jednak pewne problemy, w których rzeczy, których bym się spodziewał, nie zostały znalezione. Dzieje się tak, ponieważ czasami istnieje przypadkowa biała przestrzeń otaczająca tekst elementu. Wierzę, że jeśli szukasz „Hello World”, nadal chciałbyś, aby pasowało do „Hello World”, a nawet „Hello World \ n”. Dlatego właśnie dodałem do funkcji metodę „trim ()”, która usuwa otaczające białe znaki i zaczęła działać lepiej.
Konkretnie...
Zwróć też uwagę, że ta odpowiedź jest bardzo podobna do opcji Wybierz link według tekstu (dopasowanie ścisłe)
I dodatkowa uwaga ...
trim
usuwa tylko białe znaki przed i po wyszukanym tekście. Nie usuwa białych znaków w środku wyrazów. Uważam, że jest to pożądane zachowanie, ale możesz to zmienić, jeśli chcesz.źródło
Znalazłem sposób, który działa dla mnie. Nie jest w 100% dokładna, ale eliminuje wszystkie ciągi zawierające więcej niż tylko słowo, którego szukam, ponieważ sprawdzam, czy ciąg nie zawiera również pojedynczych spacji. Nawiasem mówiąc, nie potrzebujesz tych "". jQuery wie, że szukasz łańcucha. Upewnij się, że w części: zawiera () jest tylko jedna spacja, w przeciwnym razie nie będzie działać.
I tak, wiem, że to nie zadziała, jeśli masz takie rzeczy
<p>helloworld</p>
źródło
Jak wspomniany powyżej TJ Crowder, funkcja filtrująca czyni cuda. W moim przypadku to nie działało. Musiałem przeszukać wiele tabel i odpowiadające im znaczniki td wewnątrz elementu div (w tym przypadku okna dialogowego jQuery).
Mam nadzieję, że to komuś pomoże!
źródło
Jednowierszowy, który współpracuje z bibliotekami alternatywnymi do jQuery:
A to jest odpowiednikiem
a:contains("pattern")
selektora jQuery :źródło
Pomoże w tym .first ()
źródło