58 lines
1.4 KiB
JavaScript
58 lines
1.4 KiB
JavaScript
function Searcher() {
|
|
var spans = document.getElementsByTagName('span');
|
|
var styles = [];
|
|
var text1 = [];
|
|
var text2 = [];
|
|
var spans_length = spans.length;
|
|
|
|
for (var i = 0; i < spans_length; ++i) {
|
|
var span = spans[i];
|
|
styles.push(span.parentNode.parentNode.parentNode.parentNode.style);
|
|
text1.push(span.parentNode.childNodes[0].nodeValue);
|
|
text2.push(span.childNodes[0].nodeValue);
|
|
}
|
|
|
|
var lastValue = '';
|
|
|
|
this.grep = function (str) {
|
|
if (str == lastValue) {
|
|
return;
|
|
} else {
|
|
lastValue = str;
|
|
}
|
|
|
|
var regs = [];
|
|
var words = str.split(' ');
|
|
for (var i = 0; i < words.length; ++i) {
|
|
if (words[i] != '') {
|
|
regs.push(new RegExp(words[i].replace(/(\W)/g, "\\$1"), 'i'));
|
|
}
|
|
}
|
|
|
|
for (var i = 0; i < spans_length; ++i) {
|
|
var span = spans[i];
|
|
var matched = true;
|
|
for (var j = 0; j < regs.length; ++j) {
|
|
if (!regs[j].test(text1[i]) && !regs[j].test(text2[i])) {
|
|
matched = false;
|
|
break;
|
|
}
|
|
}
|
|
|
|
styles[i].display = matched ? '' : 'none';
|
|
}
|
|
}
|
|
}
|
|
|
|
var searcher;
|
|
function init() {
|
|
searcher = new Searcher();
|
|
setInterval(onTimer, 400);
|
|
}
|
|
|
|
function onTimer() {
|
|
searcher.grep(document.getElementById('grepword').value);
|
|
}
|
|
|
|
window.onload = init;
|