2013-11-20 44 views
1

正在遍历每个文本节点并查找搜索字符串是否在该文本节点中可用。如果其呈现将环绕span节点进行高亮显示。示例代码在下面的链接中可用。不区分大小写在DOM中搜索字符串

Demo:http://jsfiddle.net/LcRDz/

现在如果用户给出了一个字,就只搜索这个词。 现在我需要的是搜索DOM的单词而不考虑case.例如,如果我的搜索词是''',它应该突出显示单词THE,THE,

这可能吗?任何人都可以提出解决方案吗?

回答

1

在与indexOf进行检查之前,在两个值上均使用toLowercase,从而使比较不区分大小写。

//Notice both n.nodeValue and word are sent to lowercase. 
for (var i; 
     (i = n.nodeValue.toLowerCase().indexOf(word.toLowerCase(), i)) > -1; 
      n = after) { 
      var after = n.splitText(i + word.length); 
      var highlighted = n.splitText(i); 
      var span = document.createElement('span'); 
      span.className = "spanClass"; 
      span.style.backgroundColor = "red"; 
      span.appendChild(highlighted); 
      after.parentNode.insertBefore(span, after); 
     } 

JS FIDDLE:http://jsfiddle.net/LcRDz/2/

1

你应该只通过对矫正

for (var i; 
    (i = n.nodeValue.indexOf(word, i)) > -1; n = after) 

for (var i; 
    (i = n.nodeValue.toLowerCase().indexOf(word.toLowerCase(), i)) > -1; n = after) 
+0

'word'应该也可以发送到小写 –

1

在highlightWords方法更改为循环从

解决

原文:

for (var i; 
      (i = n.nodeValue.indexOf(word, i)) > -1; n = after) 

新:

for (var i; 
      (i = n.nodeValue.toLowerCase().indexOf(word.toLowerCase(), i)) > -1; n = after)