Baiklah, saya bertanya-tanya apakah ada cara untuk membuat :contains()
pemilih jQuery untuk memilih elemen dengan hanya string yang diketikkan
sebagai contoh -
<p>hello</p>
<p>hello world</p>
$('p:contains("hello")').css('font-weight', 'bold');
Pemilih akan memilih kedua p
elemen dan membuatnya tebal, tapi saya ingin hanya memilih yang pertama.
jquery
jquery-selectors
julian
sumber
sumber
:contains
pemilih dengan kode Anda sendiri, tapi saya kira itu bukan maksud Anda?Jawaban:
Tidak, tidak ada pemilih jQuery (atau CSS) yang melakukan itu.
Anda dapat dengan mudah menggunakan
filter
:Ini bukan pemilih , tapi itu berfungsi. :-)
Jika Anda ingin menangani spasi putih sebelum atau setelah "halo", Anda dapat melemparkan
$.trim
di sana:Untuk pengoptimal prematur di luar sana, jika Anda tidak peduli itu tidak cocok
<p><span>hello</span></p>
dan serupa, Anda dapat menghindari panggilan ke$
dantext
dengan menggunakaninnerHTML
langsung:... tetapi Anda harus memiliki banyak paragraf agar itu penting, begitu banyak sehingga Anda mungkin memiliki masalah lain terlebih dahulu. :-)
sumber
$.trim
itu dari spasi putih menyimpang sebelum membuat perbandingan.==
(== 2
) atau memasukkan nomor ke dalam string (=== "2"
), karena nilai yang Anda peroleh daritext()
atauinnerHTML
selalu berupa string. Jika Anda membandingkan dengan string, tidak masalah apakah Anda menggunakan==
atau===
.:contains
yang agak lebih kompleks, tetapi belum menerapkan pemilih untuk pencocokan teks yang tepat. = {Coba tambahkan fungsi extended pseudo:
Maka Anda dapat melakukan:
sumber
$.expr[':'].textEquals = $.expr[':'].textEquals || $.expr.createPseudo(function(arg) {
Anda dapat menggunakan fungsi filter () jQuery untuk mencapai ini.
sumber
Jadi jawaban Amandu kebanyakan berhasil. Namun, menggunakannya di alam liar, saya mengalami beberapa masalah, di mana hal-hal yang saya harapkan tidak ditemukan. Ini karena kadang-kadang ada ruang putih acak di sekitar teks elemen. Adalah keyakinan saya bahwa jika Anda mencari "Hello World", Anda masih ingin itu cocok dengan "Hello World", atau bahkan "Hello World \ n". Jadi, saya baru saja menambahkan metode "trim ()" ke fungsi, yang menghilangkan spasi putih, dan mulai bekerja lebih baik.
Secara khusus...
Perhatikan juga, jawaban ini sangat mirip dengan Pilih tautan menurut teks (kecocokan persis)
Dan catatan sekunder ...
trim
hanya menghilangkan spasi putih sebelum dan sesudah teks yang dicari. Itu tidak menghapus spasi di tengah kata-kata. Saya percaya ini adalah perilaku yang diinginkan, tetapi Anda bisa mengubahnya jika Anda mau.sumber
Saya menemukan cara yang bekerja untuk saya. Ini tidak 100% tepat tetapi menghilangkan semua string yang mengandung lebih dari sekedar kata yang saya cari karena saya memeriksa string yang tidak mengandung spasi individual juga. Ngomong-ngomong kamu tidak butuh ini "". jQuery tahu Anda sedang mencari string. Pastikan Anda hanya memiliki satu ruang di bagian: berisi () jika tidak, tidak akan berfungsi.
Dan ya saya tahu itu tidak akan berhasil jika Anda memiliki barang seperti
<p>helloworld</p>
sumber
Seperti TJ Crowder yang disebutkan di atas, fungsi filter memang menakjubkan. Itu tidak bekerja untuk saya dalam kasus khusus saya. Saya perlu mencari beberapa tabel dan masing-masing tag td di dalam div (dalam hal ini dialog jQuery).
Saya harap ini membantu seseorang!
sumber
Satu baris yang berfungsi dengan pustaka alternatif untuk jQuery:
Dan ini setara dengan
a:contains("pattern")
pemilih jQuery :sumber
.First () akan membantu di sini
sumber