Dapatkah seseorang membantu saya dengan fungsi javascript yang dapat menyorot teks pada halaman web. Dan persyaratannya adalah - menyorot hanya sekali, tidak seperti menyorot semua kemunculan teks seperti yang kita lakukan dalam kasus pencarian.
javascript
highlighting
Ankit
sumber
sumber
Jawaban:
Anda dapat menggunakan efek sorotan jquery .
Tetapi jika Anda tertarik dengan kode javascript mentah, lihat apa yang saya dapatkan. Cukup salin tempel ke HTML, buka file dan klik "sorot" - ini akan menyorot kata "rubah". Dari segi kinerja, saya pikir ini akan dilakukan untuk teks kecil dan satu pengulangan (seperti yang Anda tentukan)
Editan:
Menggunakan
replace
Saya melihat jawaban ini mendapatkan popularitas, saya pikir saya bisa menambahkannya. Anda juga dapat dengan mudah menggunakan ganti
"the fox jumped over the fence".replace(/fox/,"<span>fox</span>");
Atau untuk beberapa kemunculan (tidak relevan untuk pertanyaan, tetapi diminta dalam komentar) Anda cukup menambahkan
global
ganti ekspresi reguler."the fox jumped over the other fox".replace(/fox/g,"<span>fox</span>");
Semoga ini membantu untuk komentator yang tertarik.
Mengganti HTML ke seluruh halaman web
untuk mengganti HTML untuk seluruh halaman web, Anda harus merujuk ke
innerHTML
badan dokumen.document.body.innerHTML
sumber
"<span class='highlight'>"
dengan"<span style='color: " + color + ";'>"
, warna harus sepertivar color = "#ff0000";
<img src="fox.jpg" />
Anda akan mendapatkan HTML yang tidak valid yang akan terlihat seperti ini:<img src="<span class='highlight'>fox</span>.jpg" />
Tidak bagusSolusi yang ditawarkan di sini cukup buruk.
&
untuk &,<
untuk <,>
untuk>,ä
untuk ä,ö
untuk öü
untuk üß
untuk ß, dll.Apa yang kamu butuhkan:
Ulangi dokumen HTML, temukan semua node teks, dapatkan
textContent
, dapatkan posisi teks sorotan denganindexOf
(dengan opsionaltoLowerCase
jika harus peka huruf besar-kecil), tambahkan semuanya sebelumnyaindexof
sebagaitextNode
, tambahkan Teks yang cocok dengan rentang sorotan, dan ulangi untuk sisa kode teks (string sorotan mungkin muncul beberapa kali dalamtextContent
string).Ini kode untuk ini:
Kemudian Anda bisa menggunakannya seperti ini:
Berikut ini contoh dokumen HTML
Ngomong-ngomong, jika Anda mencari di database dengan
LIKE
,misalnya
WHERE textField LIKE CONCAT('%', @query, '%')
[yang seharusnya tidak Anda lakukan, Anda harus menggunakan pencarian teks lengkap atau Lucene], maka Anda dapat keluar dari setiap karakter dengan \ dan menambahkan pernyataan-escape-SQL, dengan cara itu Anda akan menemukan karakter khusus yang merupakan ekspresi LIKE.misalnya
dan nilai @query tidak
'%completed%'
tetapi'%\c\o\m\p\l\e\t\e\d%'
(diuji, berfungsi dengan SQL-Server dan PostgreSQL, dan setiap sistem RDBMS lain yang mendukung ESCAPE)
Sebuah versi skrip yang direvisi:
Pemakaian:
sumber
ä
mis. akan diubah menjadi karakter sebenarnya, bahkan saat menggunakaninnerHTML
.Mengapa menggunakan fungsi penyorotan buatan sendiri adalah ide yang buruk
Alasan mengapa mungkin ide yang buruk untuk mulai membangun fungsi penyorotan Anda sendiri dari awal adalah karena Anda pasti akan mengalami masalah yang telah diselesaikan orang lain. Tantangan:
innerHTML
)Kedengarannya rumit? Jika Anda menginginkan beberapa fitur seperti mengabaikan beberapa elemen dari penyorotan, pemetaan diakritik, pemetaan sinonim, pencarian di dalam iframe, pencarian kata terpisah, dll. Ini menjadi semakin rumit.
Gunakan plugin yang sudah ada
Saat menggunakan plugin yang sudah ada dan diimplementasikan dengan baik, Anda tidak perlu khawatir tentang hal-hal yang disebutkan di atas. Artikel 10 plugin penyorot teks jQuery di Sitepoint membandingkan plugin penyorot populer.
Silahkan lihat mark.js
mark.js adalah plugin semacam itu yang ditulis dalam JavaScript murni, tetapi juga tersedia sebagai plugin jQuery. Itu dikembangkan untuk menawarkan lebih banyak peluang daripada plugin lain dengan opsi untuk:
DEMO
Atau Anda bisa melihat biola ini .
Contoh penggunaan :
Ini gratis dan dikembangkan sebagai sumber terbuka di GitHub ( referensi proyek ).
sumber
acrossElements
opsi. Dan untuk komentar ketiga; mark.js tidak besar dibandingkan dengan fungsionalitas yang ditawarkannya. Dan tidak, tidak mungkin ada sesuatu yang rusak di masa mendatang, karena mark.js telah diuji, misalnya memulai Chrome 30 dan di semua versi yang lebih baru dengan pengujian unit lintas-browser dan tidak pernah ada masalah dengan versi yang akan datang.sumber
span.style.backgroundColor = "yellow";
diterjemahkan ke CSSstyle="background-color: yellow;"
- perbedaan halus antara camelCase dan notasi putus-putus membuat saya tersandung pada awalnya.Inilah solusi JavaScript murni regexp saya:
sumber
one|two|three
>
karakter. Ubah regex(?!([^<]+)?<)
agar berfungsi.Saya memiliki masalah yang sama, banyak teks masuk melalui permintaan xmlhttp. Teks ini berformat html. Saya perlu menyoroti setiap kejadian.
Masalahnya adalah saya tidak perlu menyorot teks dalam tag. Misalnya saya perlu menyorot rubah:
Sekarang saya bisa menggantinya dengan:
Untuk menjawab pertanyaan Anda: Anda dapat mengabaikan g di opsi regexp dan hanya kemunculan pertama yang akan diganti tetapi ini masih yang ada di properti img src dan menghancurkan tag gambar:
Ini adalah cara saya menyelesaikannya tetapi bertanya-tanya apakah ada cara yang lebih baik, sesuatu yang saya lewatkan dalam ekspresi reguler:
sumber
<img src="word">
atau<a href="word">
.Tidak ada solusi lain yang benar-benar sesuai dengan kebutuhan saya, dan meskipun solusi Stefan Steiger berfungsi seperti yang saya harapkan, saya merasa sedikit terlalu bertele-tele.
Berikut adalah usaha saya:
Saya juga akan merekomendasikan menggunakan sesuatu seperti escape-string-regexp jika kata kunci Anda dapat memiliki karakter khusus yang perlu di-escape dalam regex:
sumber
Contoh TypeScript sederhana
CATATAN: Meskipun saya setuju dengan @Stefan dalam banyak hal, saya hanya membutuhkan sorotan kecocokan sederhana :
Dan kemudian menyusun hasil aktual:
sumber
Sejak HTML5 Anda dapat menggunakan file
<mark></mark>
tag untuk menyorot teks. Anda dapat menggunakan javascript untuk membungkus beberapa teks / kata kunci di antara tag ini. Berikut ini sedikit contoh cara menandai dan menghapus tanda teks.JSFIDDLE DEMO
sumber
innerHTML
berbahaya. Ini akan menghapus acara.Maju cepat ke 2019, API Web sekarang memiliki dukungan asli untuk menyorot teks:
Dan Anda siap berangkat!
anchorNode
adalah simpul awal pemilihan,focusNode
adalah simpul akhir pemilihan. Dan, jika mereka adalah node teks,offset
adalah indeks dari karakter awal dan akhir di node masing-masing. Berikut dokumentasinyaMereka bahkan memiliki demo langsung
sumber
Saya juga bertanya-tanya, Anda bisa mencoba apa yang saya pelajari di posting ini .
Saya menggunakan:
Anda juga dapat mencobanya di sini: http://henriquedonati.com/projects/Extension/extension.html
xc
sumber
Kami jika Anda juga ingin disorot pada pemuatan halaman, ada cara baru.
tambahkan saja
#:~:text=Highlight%20These
coba akses tautan ini
/programming/38588721#:~:text=Highlight%20a%20text
sumber
Menggunakan metode surroundContents () pada tipe Range . Argumen satu-satunya adalah elemen yang akan membungkus Range itu.
sumber