0

他人のコードで作業していますが、変更しすぎると壊れてしまいます。ユーザーが強調表示したテキストの一部を強調表示する必要があります。実際のテキストではなく、その要素の ID に基づいて強調表示する必要があります。実際のテキストに基づいている場合、そのテキストのすべてのインスタンスが強調表示され、ユーザーが選択したインスタンスのみが必要です。私は、このコードを編集して、必要なことを実行する方法を見つけようとして、1週間頭を悩ませてきました。これを達成するために何を編集する必要があるかを理解してくれる人はいますか?

//-------------------------------------------------------
// 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;
}
//-------------------------------------------------------
4

1 に答える 1

0

それがまさにあなたが必要としているものかどうかはわかりませんが、始めるには十分かもしれません。コードを拡張して、汎用<font>タグの代わりに、検索語が<span>クラス.hilite. 次に、スクリプトはその span タグの最初の出現を検索し、親の ID を変数 ( firstParent) として設定します。

更新された例

この例では jQuery を使用しているため、次のように親要素を参照できます。

$('#' + firstParent).before('<img src="myicon.png" />');

これにより、親の前にアイコンが挿入されます。

これを出発点として使用して、必要に応じてスクリプトを拡張できます。検索用語が見つからない場合、または親要素に ID がない場合に備えて、おそらくエラーチェックの追加レイヤーを構築する必要があります...

于 2012-10-10T13:03:17.737 に答える