使用javascript突出显示div中的单词

时间:2009-09-11 13:58:05

标签: html css

您必须在我的项目中实现查找和替换功能。在此功能中,在contenteditable div的顶部有一个查找和替换按钮。当用户点击此按钮时,弹出窗口将打开并在指定单词时询问搜索词,然后按查找它将仅在该div中找到单词。如果匹配,则会突出显示该单词。所以任何人都告诉我如何突出div中的单词。请它紧急。谢谢。

<div id="test" contenteditable="true">
this is test <font class='classname'> some text test</font>
</div>

我想高光只有测试词而不是

4 个答案:

答案 0 :(得分:0)

您需要搜索div以查找单词,然后将该单词放入跨度,并更改跨度的背景颜色。

编辑:我刚刚注意到你没有使用CSS,所以你需要插入一个字体标签来改变颜色。

答案 1 :(得分:0)

使用prototype库实际上非常简单:

<html> 
    <head> 
        <style type="text/css">
            #content span {
                background-color: yellow;
            }
        </style>
        <script type="text/javascript" src="prototype.js"></script>
        <script type="text/javascript">
            Event.observe(window,'load',function(){
                var htm = $('content').innerHTML;
                $('content').innerHTML = htm.sub('my','<span>my</span>');
            });
        </script>
    </head>
    <body>

        <div id="content">
            This is the div containing my content.
        </div>

    </body>
</html>

这应该让你开始,这样你就可以实现其余的。

答案 2 :(得分:0)

我只是从文档工具Sphix中偷走了这个:

/**
 * highlight a given string on a jquery object by wrapping it in
 * span elements with the given class name.
 */
jQuery.fn.highlightText = function(text, className) {
  function highlight(node) {
    if (node.nodeType == 3) {
      var val = node.nodeValue;
      var pos = val.toLowerCase().indexOf(text);
      if (pos >= 0 && !jQuery.className.has(node.parentNode, className)) {
        var span = document.createElement("span");
        span.className = className;
        span.appendChild(document.createTextNode(val.substr(pos, text.length)));
        node.parentNode.insertBefore(span, node.parentNode.insertBefore(
          document.createTextNode(val.substr(pos + text.length)),
          node.nextSibling));
        node.nodeValue = val.substr(0, pos);
      }
    }
    else if (!jQuery(node).is("button, select, textarea")) {
      jQuery.each(node.childNodes, function() {
        highlight(this)
      });
    }
  }
  return this.each(function() {
    highlight(this);
  });
}

/**
 * helper function to hide the search marks again
 */
hideSearchWords : function() {
  $('.sidebar .this-page-menu li.highlight-link').fadeOut(300);
  $('span.highlight').removeClass('highlight');
},

/**
 * highlight the search words provided in the url in the text
 */
highlightSearchWords : function() {
  var params = $.getQueryParameters();
  var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
  if (terms.length) {
    var body = $('div.body');
    window.setTimeout(function() {
      $.each(terms, function() {
        body.highlightText(this.toLowerCase(), 'highlight');
      });
    }, 10);
    $('<li class="highlight-link"><a href="javascript:Documentation.' +
      'hideSearchWords()">' + _('Hide Search Matches') + '</a></li>')
        .appendTo($('.sidebar .this-page-menu'));
  }
},

因此,将此添加到您网站中的js文件中,任何带有突出显示GET参数的页面都将搜索并突出显示该页面中的单词。 您可以在以下位置找到工作代码的演示:

http://sphinx.pocoo.org/intro.html?highlight=python

注意:此代码需要jQuery,当然......

答案 3 :(得分:-1)

要突出显示单词,您必须以某种方式选择它。一种选择是用span标记包围单词。

this is <span class="highlight">test</span> some text test

然后为高亮类指定CSS。