The example in this paper describes how jquery implements highlighting Web page keywords. Share to everyone for your reference. Specific as follows:
This is based on the jquery implementation of the highlight page search keyword code, when you enter in the text box, if the following body contains your input, which is the keyword, then these keywords will be highlighted, is dynamically added to yellow, looks very eye-catching, Like Baidu snapshot display keywords look like.
The effect is as follows:
<!DOCTYPE html>
<meta http-equiv=
"Content-Type"
content=
"text/html; charset=utf-8"
/>
<title>jquery文字高亮显示</title>
<style type=
"text/css"
>
.highlight {
padding:0px 0px 0px 5px; background-image:initial; background-position:initial; background-size:initial; background-repeat:initial; background-attachment:initial; background-origin:initial; background-clip:initial; BORDER-LEFT:3PX Solid RGB (108, 226, 108); line-height:20px; width:640px; Clear:both; border-radius:0px!important; border-top:0px!important; border-right:0px!important; border-bottom:0px!important; Border-image:initial!important; Bottom:auto!important; Float:none!important; Height:auto!important; Left:auto!important; outline:0px!important; Overflow:visible!important; Position:static!important; Right:auto!important; Top:auto!important; Vertical-align:baseline!important; Box-sizing:content-box!important; Font-family:consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace!important; Min-height:auto!important; Color:gray!important; " > #fff34d;
-moz-border-radius: 5px;
/* FF1+ */
-webkit-border-radius: 5px;
/* Saf3-4 */
border-radius: 5px;
/* Opera 10.5, IE 9, Saf5, Chrome */
-moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.7);
/* FF3.5+ */
-webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.7);
/* Saf3.0+, Chrome */
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.7);
/* Opera 10.5+, IE 9.0 */
}
.highlight {
padding:1px 4px;
margin:0 -4px;
}
</style>
<body>
Search: <input type=
"text"
id=
"text-search"
/>
<p>This can include web design, web content development, client liaison, client-side/server-side scripting, web server and network security configuration, and e-commerce development. However, among web professionals,
"web development"
usually refers to the main non-design aspects of building web sites: writing markup and coding. Web development can range from developing the simplest static single page of plain text to the most complex web-based internet applications, electronic businesses, or social ntwork services.</p>
(Text from Wikipedia)
<script type=
"text/javascript"
src=
"jquery-1.6.2.min.js"
></script>
<script type=
"text/javascript"
>
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
.each(
function
() {
innerHighlight(
this
, pat.toUpperCase());
});
};
jQuery.fn.removeHighlight =
function
() {
function
newNormalize(node) {
for
(
var
i = 0, children = node.childNodes, nodeCount = children.length; i < nodeCount; i++) {
var
child = children[i];
if
(child.nodeType == 1) {
newNormalize(child);
continue
;
}
if
(child.nodeType != 3) {
continue
; }
var
next = child.nextSibling;
if
(next ==
null
|| next.nodeType != 3) {
continue
; }
var
combined_text = child.nodeValue + next.nodeValue;
new_node = node.ownerDocument.createTextNode(combined_text);
node.insertBefore(new_node, child);
node.removeChild(child);
node.removeChild(next);
i--;
nodeCount--;
}
}
return
this
.find(
"span.highlight"
).each(
function
() {
var
thisParent =
this
.parentNode;
thisParent.replaceChild(
this
.firstChild,
this
);
newNormalize(thisParent);
}).end();
};
</script>
<script type=
"text/javascript"
>
$(
function
() {
$(
‘#text-search‘
).bind(
‘keyup change‘
,
function
(ev) {
// pull in the new value
var
searchTerm = $(
this
).val();
// remove any old highlighted terms
$(
‘body‘
).removeHighlight();
// disable highlighting if empty
if
( searchTerm ) {
// highlight the new term
$(
‘body‘
).highlight( searchTerm );
}
});
});
</script>
</body>
How jquery implements highlighting Web page keywords