使用javascript突出显示用户选择的文本

使用javascript突出显示用户选择的文本,javascript,html,Javascript,Html,我正在使用其他人的代码,如果我更改太多,代码就会中断。 我需要突出显示用户突出显示的部分文本。 它需要根据该元素的ID而不是实际文本突出显示。如果它基于实际文本,它将突出显示该文本的每个实例,并且我只想要用户选择的实例。我已经绞尽脑汁一个星期了,现在我想知道如何编辑这段代码,这样它就能完成我需要它做的事情。有谁能帮我弄清楚为了完成这项任务我需要编辑什么吗 //------------------------------------------------------- // Name: doHi

我正在使用其他人的代码,如果我更改太多,代码就会中断。 我需要突出显示用户突出显示的部分文本。 它需要根据该元素的ID而不是实际文本突出显示。如果它基于实际文本,它将突出显示该文本的每个实例,并且我只想要用户选择的实例。我已经绞尽脑汁一个星期了,现在我想知道如何编辑这段代码,这样它就能完成我需要它做的事情。有谁能帮我弄清楚为了完成这项任务我需要编辑什么吗

//-------------------------------------------------------
// Name: doHighlight()
// Find all occurences of the search term in the given text,
// and add some "highlight" tags to them (we're not using a
// regular expression search, because we want to filter out
// matches that occur within HTML tags and script blocks, so
// we have to do a little extra validation)
//-------------------------------------------------------
function doHighlight(bodyText, searchTerm, highlightStartTag, highlightEndTag)
{
    var newText = "";
    var i = -1;
    var lcSearchTerm = searchTerm.toLowerCase();
    var lcBodyText = bodyText.toLowerCase();
    var temp = 0;
    var counter = 0;

//********************************************************************
//********************************************************************
//********************************************************************
//Here is the ID of the <p> element where our text was selected
    alert(textId);
//Here is the text of the ID of the <p> element we selected
     alert(document.getElementById(textId).innerHTML);
//********************************************************************
//********************************************************************
//********************************************************************

    while (bodyText.length > 0)
    {
        i = lcBodyText.indexOf(lcSearchTerm, i++);

        if (i < 0)
    {
        newText += bodyText;
        bodyText = "";
    }
    else
    {
        // skip anything inside an HTML tag
         if (bodyText.lastIndexOf(">", i) >= bodyText.lastIndexOf("<", i))
        {
            // skip anything inside a <script> block
            if (lcBodyText.lastIndexOf("/script>", i) >= lcBodyText.lastIndexOf("<script", i))
            {   
//********************************************************************
//********************************************************************
//********************************************************************
// Writes the document til it reaches the search term, then adds highlightStartTag then the search term then highlightEndTag
// Then writes more of the document until the search term is reached again 
// Needs to search for the term based on the id="" given to the <p> element
// Then add the highlightStartTag and highlightEndTag
                newText += bodyText.substring(0, i) + highlightStartTag + bodyText.substr(i, searchTerm.length) + highlightEndTag;
                bodyText = bodyText.substr(i + searchTerm.length); 
                lcBodyText = bodyText.toLowerCase();
                i = +1;
//********************************************************************
//********************************************************************
//********************************************************************
                }
            }
        }
        //break;
    }
    //newText += bodyText;
    return newText;
}
//-------------------------------------------------------
//-------------------------------------------------------
//名称:doHighlight()
//查找给定文本中出现的所有搜索词,
//并向它们添加一些“突出显示”标记(我们不使用
//正则表达式搜索,因为我们要过滤掉
//在HTML标记和脚本块中发生的匹配,因此
//我们需要做一些额外的验证)
//-------------------------------------------------------
函数doHighlight(bodyText、searchTerm、highlightStartTag、highlightdtag)
{
var newText=“”;
var i=-1;
var lcSearchTerm=searchTerm.toLowerCase();
var lcBodyText=bodyText.toLowerCase();
var-temp=0;
var计数器=0;
//********************************************************************
//********************************************************************
//********************************************************************
//下面是选择文本的元素的ID
警报(textId);
//下面是我们选择的元素的ID文本
警报(document.getElementById(textId.innerHTML);
//********************************************************************
//********************************************************************
//********************************************************************
while(bodyText.length>0)
{
i=lcBodyText.indexOf(lcSearchTerm,i++);
if(i<0)
{
newText+=正文;
bodyText=“”;
}
其他的
{
//跳过HTML标记中的任何内容

如果(bodyText.lastIndexOf(“>”,i)>=bodyText.lastIndexOf(“,i)>=lcBodyText.lastIndexOf("

我不确定它是否正是你需要的,但它可能足以让你开始,我已经设法增加代码,而不是一个通用的代码>代码/>标签,搜索项用一个<代码> >代码>标签,用一个<>代码> .HelITe>代码>来突出显示。然后,脚本搜索该跨度标签的第一次出现,并设置PAR。ent的ID作为变量(

firstParent

该示例使用jQuery,因此您可以像下面这样引用父元素:

$('#' + firstParent).before('<img src="myicon.png" />');
$('#'+firstParent).before('');
这将在包含的父对象之前插入一个图标


您可以将其用作一个跳转点,以根据您的需要扩展脚本。您可能应该添加一个额外的错误检查层,以防找不到搜索词,或者父元素没有ID…。

因此用户选择一些文本,然后您希望突出显示特定的选定文本?我们在元素的e面。这非常有效,但是如果用户突出显示“工具和提示”,那么它会在每个“工具和提示”实例旁边放置一个小图标。我们只想将图标放在用户选择的实例旁边。因此,我需要修改此代码,根据元素的ID将highlightStartTag和EndTag添加到元素。这个小图标是什么?为什么不使用JSFIDLE来解释您的问题,以便我们可以轻松地帮助您解决问题?我很想使用JFIDLE来解释,但这里有太多的代码让我无法做到这一点。我无法显示完成这一点所需的大部分信息。加上JSFIDLE没有足够的空间。我尝试了JSFIDLE,但无法让它工作。虽然在dreamweaver中工作得很好。但本质上是一样的。我编辑了它,使每个段落都有一个ID a与之相关,以帮助强调我正在尝试做的事情。感谢您的输入。但我不太确定如何实现这一点。这家伙编写的代码一团糟,我已设法找到并修复了其他5个问题,这是我要求我解决的问题。此文本突出显示问题是我要解决的最后一个问题。然后,我将能够编写我自己的所有代码从这里开始。好的,看看这个:它为所有出现的搜索词添加了一个“hilite”span,然后将父项的内容包装在一个span标记中,并应用样式。这实际上突出显示了整个父项标记。您可以通过对父项标记本身重新排序来实现同样的目的。如果您想级联备份文档(比如说,要找到直接的p标记)看看这里:更新的JSFIDLE只影响父p标记…(注意,这将在页面上出现的所有单词上触发;如果搜索词出现在多个段落中,所有这些段落的背景都将改变颜色)我真的很感谢您的意见。JSFIDLE目前还没有为我打开,但我会尽快让您知道它是否对我有效。再次感谢您。没问题-是的,在我更新代码时,JSFIDLE对我来说有点不稳定。如果对您有帮助,请不要忘记接受答案:)