Rumah >hujung hadapan web >tutorial js >Bagaimanakah saya boleh menyerlahkan teks menggunakan jQuery?
Menyerlahkan Teks dengan jQuery
Penerangan Masalah:
Anda ingin menyerlahkan perkataan tertentu dalam blok teks tertentu menggunakan jQuery.
Penyelesaian:
Untuk menyerlahkan perkataan menggunakan jQuery, anda boleh menggunakan pemalam seperti highlight atau versi terkini skrip asal yang disediakan di bawah:
jQuery.fn.highlight = function (pat) { function innerHighlight(node, pat) { var skip = 0; if (node.nodeType == 3) { var pos = node.data.toUpperCase().indexOf(pat); if (pos >= 0) { var spannode = document.createElement('span'); spannode.className = 'highlight'; var middlebit = node.splitText(pos); var endbit = middlebit.splitText(pat.length); var middleclone = middlebit.cloneNode(true); spannode.appendChild(middleclone); middlebit.parentNode.replaceChild(spannode, middlebit); skip = 1; } } else if (node.nodeType == 1 && node.childNodes && !/(script|style)/i.test(node.tagName)) { for (var i = 0; i < node.childNodes.length; ++i) { i += innerHighlight(node.childNodes[i], pat); } } return skip; } return this.length && pat && pat.length ? this.each(function () { innerHighlight(this, pat.toUpperCase()); }) : this; }; jQuery.fn.removeHighlight = function () { return this.find("span.highlight").each(function () { this.parentNode.firstChild.nodeName; with (this.parentNode) { replaceChild(this.firstChild, this); normalize(); } }).end(); };
Pendekatan Alternatif:
Jika anda lebih suka penyelesaian yang lebih terkini dan kaya dengan ciri, pertimbangkan pemalam berikut:
jQuery.extend({ highlight: function (node, re, nodeName, className) { if (node.nodeType === 3) { var match = node.data.match(re); if (match) { var highlight = document.createElement(nodeName || 'span'); highlight.className = className || 'highlight'; var wordNode = node.splitText(match.index); wordNode.splitText(match[0].length); var wordClone = wordNode.cloneNode(true); highlight.appendChild(wordClone); wordNode.parentNode.replaceChild(highlight, wordNode); return 1; //skip added node in parent } } else if ((node.nodeType === 1 && node.childNodes) && // only element nodes that have children !/(script|style)/i.test(node.tagName) && // ignore script and style nodes !(node.tagName === nodeName.toUpperCase() && node.className === className)) { // skip if already highlighted for (var i = 0; i < node.childNodes.length; i++) { i += jQuery.highlight(node.childNodes[i], re, nodeName, className); } } return 0; } }); jQuery.fn.unhighlight = function (options) { var settings = { className: 'highlight', element: 'span' }; jQuery.extend(settings, options); return this.find(settings.element + "." + settings.className).each(function () { var parent = this.parentNode; parent.replaceChild(this.firstChild, this); parent.normalize(); }).end(); }; jQuery.fn.highlight = function (words, options) { var settings = { className: 'highlight', element: 'span', caseSensitive: false, wordsOnly: false }; jQuery.extend(settings, options); if (words.constructor === String) { words = [words]; } words = jQuery.grep(words, function (word, i) { return word != ''; }); words = jQuery.map(words, function (word, i) { return word.replace(/[-[\]{}()*+?.,\^$|#\s]/g, "\$&&"); }); if (words.length == 0) { return this; }; var flag = settings.caseSensitive ? "" : "i"; var pattern = "(" + words.join("|") + ")"; if (settings.wordsOnly) { pattern = "\b" + pattern + "\b"; } var re = new RegExp(pattern, flag); return this.each(function () { jQuery.highlight(this, re, settings.element, settings.className); }); };
Pemalam ini menyediakan ciri tambahan seperti keupayaan untuk menentukan nama teg tersuai dan nama kelas untuk elemen yang diserlahkan, cari berbilang istilah serentak, dan lakukan carian sensitif huruf besar-besaran. Ia juga termasuk kaedah untuk mengalih keluar penyerlahan sedia ada.
Atas ialah kandungan terperinci Bagaimanakah saya boleh menyerlahkan teks menggunakan jQuery?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!