2

さて、かなり前に、ハイライトプラグインを使用してjqueryスクリプトを作成しました。これにより、入力に用語を入力でき、テキストで強調表示され、強調表示されたものから次または前のボタンをクリックしてスクロールできます要素を別の要素にスパンします。

このリンクのボタンをクリックして遊んでみることができます: http://jsfiddle.net/m6ZMp/

highlight/scrollここで、前の例のテキストと同じデモ コンテナーに配置した、乱雑な html コードでこのスクリプトを使用する必要があります。検索用語のハイライトは問題なく機能しますが、ボタンをクリックするとエラーが発生しprevますnext。それは、強調表示された単語から別の単語にスクロールするためにそれらを使用しているためです。

count = 0;
$('#next1').click(function (e) {
    var max_length = $('.highlight1').length;
        if (count < max_length) {
            count++;
        } else {
            count = 1;
        }
        e.preventDefault();
        scrollToElement('.highlight1:nth-child(' + count + ')', 400, -150);
    });

    $('#prev1').click(function (e) {
    var max_length = $('.highlight1').length;
        if (count > 1) {
            count--;
        } else {
            count = max_length;
        }
        e.preventDefault();
        scrollToElement('.highlight1:nth-child(' + count + ')', 400, -150);
    })

見つかった要素の数を取得するために使用しているカウントがあり、各クリック関数の最後にscrollToElement、セレクターの一部として関数にint を渡しています'.highlight1:nth-child(' + count + ')'。乱雑なドキュメントでは、強調表示された用語が同じレベルになく、同じ要素の兄弟でも子でもなく、そのために機能がうまく機能しないため、問題があると思います。

関数でエラーが発生しscrollToElementます:

キャッチされていない TypeError: null のプロパティ 'top' を読み取れません

ここで状況を確認、テスト、編集できます: http://jsfiddle.net/9EDSp/

スクリプト全体は次のようになります。

$(function () {
    $('#field1').bind('keyup change', function (ev) {
        // pull in the new value
        var searchTerm = $(this).val();

        // remove any old highlighted terms
        $('#demo-container').removeHighlight('span.highlight1');

        // disable highlighting if empty
        if (searchTerm) {
            var terms = searchTerm.split(/\s+/);
            $.each(terms, function (_, term) {
                // highlight the new term
                term = term.trim();
                if (term != "") $('#demo-container').highlight(term, 'highlight1');
            });

        }
    }).triggerHandler('change');

});

    /**  scroll to element function **/

    function scrollToElement(selector, time, verticalOffset) {
        time = typeof (time) != 'undefined' ? time : 500;
        verticalOffset = typeof (verticalOffset) != 'undefined' ? verticalOffset : 0;
        element = $(selector);
        offset = element.offset();
        offsetTop = offset.top + verticalOffset + $('#demo-container').scrollTop();
        $('#demo-container').animate({
            scrollTop: offsetTop
        }, time);
    }

    /**document ready**/
    $(document).ready(function () {
        count = 0;
        /* scroll to 150px before .highlight with animation time of 400ms */
        $('#next1').click(function (e) {
        var max_length = $('.highlight1').length;
            if (count < max_length) {
                count++;
            } else {
                count = 1;
            }
            e.preventDefault();
            scrollToElement('.highlight1:nth-child(' + count + ')', 400, -150);
        });

        $('#prev1').click(function (e) {
        var max_length = $('.highlight1').length;
            if (count > 1) {
                count--;
            } else {
                count = max_length;
            }
            e.preventDefault();
            scrollToElement('.highlight1:nth-child(' + count + ')', 400, -150);
        })
    });

別のセレクターを使用してある用語から別の用語にスクロールする必要があるだけですか、それとも現在のコード以上の何かが必要ですか?

アドバイス、提案、またはヘルプは大歓迎です....

4

2 に答える 2

1

$.each() ループを使用して要素 highlight1 をすべて選択し、それぞれを配列に追加してみてください。現在のカウントをインデックスとして使用し、移動先の要素の正しいインデックスを選択します。次に、その要素までスクロールします。したがって、セレクターの代わりにjQueryオブジェクト/要素を渡し、ScrollToElement関数の要素を、渡したセレクターの代わりに渡したオブジェクトにマップします。nth-child を使用すると、$('.highlight1') によって返されるリスト内の (N) 項目ではなく、その親に対する (n) CHILD 要素が選択されます。

または、.index() を使用して、現在のインデックス/カウントで highlight1 アイテムを選択することもできます。ただし、インデックスはカウントを 1 つ下回ることを忘れないでください。配列ベース!

うまくいけば、それは私がそれをどのように説明したかについて理にかなっています.

于 2013-10-03T16:37:58.880 に答える
1
    I have modified the above code to work similar to page search in chrome . 
    Also added  below features
    1)added a stop word filter to remove unwanted terms being highlighted (eg a-z , an ,at etc)
    2)Change in highlight color between term navigation.




    jsp file:
 -----------------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><%@page
    language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<html>
<head>
<title>highlight</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<meta name="GENERATOR"
    content="Rational® Application Developer for WebSphere® Software">


<script src="<%=request.getContextPath()%>/js/jquery.js"
    type="text/javascript"></script>    
    <script src="<%=request.getContextPath()%>/js/highlight2.js"
    type="text/javascript"></script>    

<style type="text/css">
    @import url('http://getbootstrap.com/2.3.2/assets/css/bootstrap.css');

#outer{
    width:500px;
    height:300px;
    padding-top:50px;
}
#demo-container{
   width:200%;
   height:150%;
    overflow:auto;
}

.dock{
    position:fixed;
    background:#FFFFFF;
}

.prev-highlight {
    -moz-border-radius: 5px;
    /* FF1+ */
    -webkit-border-radius: 5px;
    /* Saf3-4 */
    border-radius: 5px;
    /* Opera 10.5, IE 9, Saf5, Chrome */
    -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.7);
    /* FF3.5+ */
    -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.7);
    /* Saf3.0+, Chrome */
    box-shadow: 0 1px 4px rgba(0, 0, 0, 0.7);
    /* Opera 10.5+, IE 9.0 */
}

.prev-highlight{
    background-color: #fff34d;
     padding:1px 4px;
      margin:0 -4px;
}



 .prev-highlight-selected {
background-color: #FF8000;
}
  </style>



<script type="text/javascript">
$(window).load(function(){
$(function () {
    $('#field1').bind('keyup change', function (ev) {
        // pull in the new value
        var searchTerm = $(this).val();
        searchTerm=searchTerm.removeStopWords();

        // remove any old highlighted terms
        $('#demo-container').removeHighlight('span.prev-highlight');

        // disable highlighting if empty
        if (searchTerm) {
            var terms = searchTerm.split(/\s+/);
            $.each(terms, function (_, term) {
                // highlight the new term
               // term = term.trim();
                if (term != "") $('#demo-container').highlight(term, 'prev-highlight');
            });

        }
    }).triggerHandler('change');

});

    /**  scroll to element function **/

    function scrollToElement(selector, time, verticalOffset) {

         selectedKeyword = $('.prev-highlight-selected');
     if (selectedKeyword) selectedKeyword.removeClass('prev-highlight-selected');
      $(selector).addClass('prev-highlight-selected');


        time = typeof (time) != 'undefined' ? time : 500;
        verticalOffset = typeof (verticalOffset) != 'undefined' ? verticalOffset : 0;

        element = $(selector);
        offset = element.offset();
      //  alert(offset.top);
        offsetTop = offset.top + verticalOffset + $('#demo-container').scrollTop();
        $('#demo-container').animate({
            scrollTop: offsetTop
        }, time);

    }

    /**document ready**/
    $(document).ready(function () {

        count = 0;


        /* scroll to 150px before .highlight with animation time of 400ms */
        $('#next1').click(function (e) {        
        count++;
        var max_length = $('.prev-highlight').length;
        var child =  (count-1)% max_length ;

            if (count == max_length) {
                count=0;
            } 
                        e.preventDefault();
            scrollToElement('.prev-highlight:eq(' + child + ')', 400, -150);
        });

        $('#prev1').click(function (e) {    
        var max_length = $('.prev-highlight').length;       
        count--;
        if (count <=0)
        {                
        count=max_length;                        
        }

   var  child =  (count-1)% max_length ;

            e.preventDefault();
            scrollToElement('.prev-highlight:eq(' + child + ')', 400, -150);
        });
    });
});

</script>


</head>
<body>
  <div class="dock">
<input class="span3" id="field1" name="field1" value="external and a internal you z" type="text">
<input type="submit" value="Search">
        <a class="btn btn-primary btn-mini" id="prev1" href="#"><i class="icon-arrow-up icon-white"></i></a>
        <a class="btn btn-primary btn-mini" id="next1" href="#"><i class="icon-arrow-down icon-white"></i></a>
    </div>






  <div id="outer">
<div id="demo-container">
    <p class=default>
      <span style="color: #ffc000; font-size: 18pt; font-family: Times New Roman">
        <i><b>Vanity URL creation</b></i>
      </span>
    </p>
    <p class=default>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">

      </span>
    </p>
    <p class=default>
      <span style="color: #ff0000; font-size: 12pt; font-family: Times New Roman">
        <i><b>Step 1: </b></i>
      </span>
    </p>
    <p class=default>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">

      </span>
    </p>
    <p class=default>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">
        We have to receive the domain name.
      </span>
    </p>
    <p class=ListaParagraph>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">

      </span>
    </p>
    <p class=ListaParagraph>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">
        For example,
      </span>
    </p>
    <p class=ListaParagraph>
      <span style="color: #000000; font-size: 16pt; font-family: Times New Roman">
        <b></b>
      </span>
    </p>
    <p class=ListaParagraph>
      <span style="color: #000000; font-size: 16pt; font-family: Times New Roman">
        <b>www. training.com or ideas. .com. </b>
      </span>
    </p>
    <p class=ListaParagraph>
      <span style="color: #000000; font-size: 16pt; font-family: Times New Roman">
        <b>It could be an individual domain name or it could be sub domain of  .com.</b>
      </span>
    </p>
    <p class=default>
      <span style="color: #000000; font-size: 16pt; font-family: Times New Roman">
        <b></b>
      </span>
    </p>
    <p class=default>
      <span style="color: #ff0000; font-size: 12pt; font-family: Times New Roman">
        <i><b>Step 2:</b></i>
      </span>
    </p>
    <p class=default>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">

      </span>
    </p>
    <p class=default>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">
        We need to check with business whether this should be only  Honeywell use or this
        is for both  external.
      </span>
    </p>
    <p class=default>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">

      </span>
    </p>
    <p class=default>
      <span style="color: #ff0000; font-size: 12pt; font-family: Times New Roman">
        <i><b>Step 3:</b></i>
      </span>
    </p>
    <p class=default>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">

      </span>
    </p>
    <p class=ListaParagraph>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">
        We need to check with the customer if https should work for this vanity domain or not. If
        https is expected to work, we have to convey them that this involves additional
      </span>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">
        <b>SSL certificate cost.</b>
      </span>
    </p>
    <p class=default>
      <span style="color: #ff0000; font-size: 12pt; font-family: Times New Roman">
        <i><b>Step 4:</b></i>
      </span>
    </p>
    <p class=default>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">

      </span>
    </p>

    <p class=default>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">

      </span>
    </p>
    <p class=default>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">
        For example, when user access ideas. .com, they should be redirected to .
      </span>
    </p>
    <p class=default>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">

      </span>
    </p>
    <p class=default>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">
        Here is the sample,
      </span>
    </p>
    <p class=default>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">

      </span>
    </p>
    <p class=default>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">

      </span>
    </p>
    <p class=default>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">
        Please note that the IP address, Port number and the log file pathfile name will change
        for each of the web server.
      </span>
    </p>
    <p class=default>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">

      </span>
    </p>
    <p class=default>
      <span style="color: #ff0000; font-size: 12pt; font-family: Times New Roman">
        <i><b>Step 6:</b></i>
      </span>
    </p>
    <p class=default>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">

      </span>
    </p>
    <p class=default>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">
        If the application is expected to work in https, then we have to put two entries. One with
        http port and other with https port.
      </span>
    </p>

      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">

      </span>
    </p>
    <p class=default>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">
        <b></b>
      </span>
    </p>
    <p class=default>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">
        <b></b>
      </span>
    </p>


     <p class=default>

    </p>
    <p class=default>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">
        We need to check with business whether this should be only  Honeywell use or this
        is for both  external.
      </span>
    </p>

    </p>
    <p class=default>
      <span style="color: #ff0000; font-size: 12pt; font-family: Times New Roman">
        <i><b>Step 3:</b></i>
      </span>
    </p>
    <p class=default>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">

      </span>
    </p>

    </p>
    <p class=ListaParagraph>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">

      </span>
    </p>

      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">
        If the application to which this vanity domain is pointing to is deployed in BK, then we
        will define the vhost in Bendix/King apache.
      </span>
    </p>
    <p class=ListaParagraph>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">

      </span>
    </p>


    <p class=default>
      <span style="color: #ff0000; font-size: 12pt; font-family: Times New Roman">
        <i><b>Step 7:</b></i>
      </span>
    </p>
    <p class=default>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">

      </span>
    </p>
    <p class=default>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">
        Once the above step is done, we can validate the vhost entry using local host file. We
        have to validate before we make DNS entry. To test with local host file, you have to find
        the internal facing IP of apache (internal CSS IP) and external facing IP. This is usually
        documented at the top of the apache include file. Refer the snapshot below.
      </span>
    </p>
    <p class=default>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">

      </span>
    </p>
    <p class=default>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">

      </span>
    </p>
    <p class=default>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">

      </span>
    </p>
    <p class=default>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">
        Find below the sample local host file entry. The local host file is usually found in Win
        XP under the path
      </span>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">
        <b>C:\WINDOWS\system32\drivers\etc\.</b>
      </span>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">
         The name of the file is "
      </span>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">
        <b>hosts</b>
      </span>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">
        ". If the domain is suppose to work from both internal and external network, then we have
        to validate with both the IPs
      </span>
    </p>
    <p class=default>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">

      </span>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">

      </span>
    </p>
    <p class=default>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">
        <b>  qideas. .com</b>
      </span>
    </p>
    <p class=default>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">

      </span>
    </p>
    <p class=default>
      <span style="color: #ff0000; font-size: 12pt; font-family: Times New Roman">
        <i><b>Step 8:</b></i>
      </span>
    </p>
    <p class=default>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">
        Once validated, we have to raise DNS ticket. If the URL is meant to be for internal, then
        we just need to raise a ticket with  DNS group. If it is for both, please create
        tickets for both the group.
      </span>
    </p>
    <p class=default>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">

      </span>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">

      </span>
    </p>
    <p class=default>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">

      </span>
    </p>
    <p class=default>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">
        <i>Example CRQ Number is</i>
      </span>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">
        <b> </b>
      </span>
      <span style="color: #548dd4; font-size: 12pt; font-family: Times New Roman">
        <b></b>
      </span>
    </p>
    <p class=default>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">

      </span>
    </p>
    <p class=default>
      <span style="color: #ff0000; font-size: 12pt; font-family: Times New Roman">
        <i><b>Step 9:</b></i>
      </span>
    </p>
    <p class=default>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">
        Once the DNS ticket is executed, validate with browser and then also with
      </span>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">

      </span>
    </p>
    <p class=default>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">
        <b></b>
      </span>
    </p>
    <p class=default>
      <span style="color: #000000; font-size: 12pt; font-family: Times New Roman">
        <b></b>
      </span>
    </p>
    </div>
    </div>
  </body>
</html>








-----------------
highlight2 javascript file:


jQuery.fn.highlight = function (pat, className) {

    function innerHighlight(node, pat) {
        var skip = 0;
        if (node.nodeType == 3) {
            var pos = node.data.toUpperCase().indexOf(pat);
            if (pos >= 0) {
                var spannode = document.createElement('span');
                spannode.className = className || 'prev-highlight';
                var middlebit = node.splitText(pos);
                var endbit = middlebit.splitText(pat.length);
                var middleclone = middlebit.cloneNode(true);
                spannode.appendChild(middleclone);
                middlebit.parentNode.replaceChild(spannode, middlebit);
                skip = 1;
            }
        } else if (node.nodeType == 1 && node.childNodes && !/(script|style)/i.test(node.tagName)) {
            for (var i = 0; i < node.childNodes.length; ++i) {
                i += innerHighlight(node.childNodes[i], pat);
            }
        }
        return skip;
    }
    return this.each(function () {
        innerHighlight(this, pat.toUpperCase());
    });
};

jQuery.fn.removeHighlight = function (classNames) {
    function newNormalize(node) {
        for (var i = 0, children = node.childNodes, nodeCount = children.length; i < nodeCount; i++) {
            var child = children[i];
            if (child.nodeType == 1) {
                newNormalize(child);
                continue;
            }
            if (child.nodeType != 3) {
                continue;
            }
            var next = child.nextSibling;
            if (next == null || next.nodeType != 3) {
                continue;
            }
            var combined_text = child.nodeValue + next.nodeValue;
            new_node = node.ownerDocument.createTextNode(combined_text);
            node.insertBefore(new_node, child);
            node.removeChild(child);
            node.removeChild(next);
            i--;
            nodeCount--;
        }
    }
    var selectors = classNames;
    if(Object.prototype.toString.call(classNames) === '[object Array]')
      selectors = classNames.join(',');

    return this.find(selectors).each(function () {
        var thisParent = this.parentNode;
        thisParent.replaceChild(this.firstChild, this);
        newNormalize(thisParent);
    }).end();
};



String.prototype.removeStopWords = function() {
    var x;
    var y;
    var word;
    var stop_word;
    var regex_str;
    var regex;
    var cleansed_string = this.valueOf();
    var stop_words = new Array(
        'a',
        'about',
        'above',
        'across',
        'after',
        'again',
        'against',
        'all',
        'almost',
        'alone',
        'along',
        'already',
        'also',
        'although',
        'always',
        'among',
        'an',
        'and',
        'another',
        'any',
        'anybody',
        'anyone',
        'anything',
        'anywhere',
        'are',
        'area',
        'areas',
        'around',
        'as',
        'ask',
        'asked',
        'asking',
        'asks',
        'at',
        'away',
        'b',
        'back',
        'backed',
        'backing',
        'backs',
        'be',
        'became',
        'because',
        'become',
        'becomes',
        'been',
        'before',
        'began',
        'behind',
        'being',
        'beings',
        'best',
        'better',
        'between',
        'big',
        'both',
        'but',
        'by',
        'c',
        'came',
        'can',
        'cannot',
        'case',
        'cases',
        'certain',
        'certainly',
        'clear',
        'clearly',
        'come',
        'could',
        'd',
        'did',
        'differ',
        'different',
        'differently',
        'do',
        'does',
        'done',
        'down',
        'down',
        'downed',
        'downing',
        'downs',
        'during',
        'e',
        'each',
        'early',
        'either',
        'end',
        'ended',
        'ending',
        'ends',
        'enough',
        'even',
        'evenly',
        'ever',
        'every',
        'everybody',
        'everyone',
        'everything',
        'everywhere',
        'f',
        'face',
        'faces',
        'fact',
        'facts',
        'far',
        'felt',
        'few',
        'find',
        'finds',
        'first',
        'for',
        'four',
        'from',
        'full',
        'fully',
        'further',
        'furthered',
        'furthering',
        'furthers',
        'g',
        'gave',
        'general',
        'generally',
        'get',
        'gets',
        'give',
        'given',
        'gives',
        'go',
        'going',
        'good',
        'goods',
        'got',
        'great',
        'greater',
        'greatest',
        'group',
        'grouped',
        'grouping',
        'groups',
        'h',
        'had',
        'has',
        'have',
        'having',
        'he',
        'her',
        'here',
        'herself',
        'high',
        'high',
        'high',
        'higher',
        'highest',
        'him',
        'himself',
        'his',
        'how',
        'however',
        'i',
        'if',
        'important',
        'in',
        'interest',
        'interested',
        'interesting',
        'interests',
        'into',
        'is',
        'it',
        'its',
        'itself',
        'j',
        'just',
        'k',
        'keep',
        'keeps',
        'kind',
        'knew',
        'know',
        'known',
        'knows',
        'l',
        'large',
        'largely',
        'last',
        'later',
        'latest',
        'least',
        'less',
        'let',
        'lets',
        'like',
        'likely',
        'long',
        'longer',
        'longest',
        'm',
        'made',
        'make',
        'making',
        'man',
        'many',
        'may',
        'me',
        'member',
        'members',
        'men',
        'might',
        'more',
        'most',
        'mostly',
        'mr',
        'mrs',
        'much',
        'must',
        'my',
        'myself',
        'n',
        'necessary',
        'need',
        'needed',
        'needing',
        'needs',
        'never',
        'new',
        'new',
        'newer',
        'newest',
        'next',
        'no',
        'nobody',
        'non',
        'noone',
        'not',
        'nothing',
        'now',
        'nowhere',
        'number',
        'numbers',
        'o',
        'of',
        'off',
        'often',
        'old',
        'older',
        'oldest',
        'on',
        'once',
        'one',
        'only',
        'open',
        'opened',
        'opening',
        'opens',
        'or',
        'order',
        'ordered',
        'ordering',
        'orders',
        'other',
        'others',
        'our',
        'out',
        'over',
        'p',
        'part',
        'parted',
        'parting',
        'parts',
        'per',
        'perhaps',
        'place',
        'places',
        'point',
        'pointed',
        'pointing',
        'points',
        'possible',
        'present',
        'presented',
        'presenting',
        'presents',
        'problem',
        'problems',
        'put',
        'puts',
        'q',
        'quite',
        'r',
        'rather',
        'really',
        'right',
        'right',
        'room',
        'rooms',
        's',
        'said',
        'same',
        'saw',
        'say',
        'says',
        'second',
        'seconds',
        'see',
        'seem',
        'seemed',
        'seeming',
        'seems',
        'sees',
        'several',
        'shall',
        'she',
        'should',
        'show',
        'showed',
        'showing',
        'shows',
        'side',
        'sides',
        'since',
        'small',
        'smaller',
        'smallest',
        'so',
        'some',
        'somebody',
        'someone',
        'something',
        'somewhere',
        'state',
        'states',
        'still',
        'still',
        'such',
        'sure',
        't',
        'take',
        'taken',
        'than',
        'that',
        'the',
        'their',
        'them',
        'then',
        'there',
        'therefore',
        'these',
        'they',
        'thing',
        'things',
        'think',
        'thinks',
        'this',
        'those',
        'though',
        'thought',
        'thoughts',
        'three',
        'through',
        'thus',
        'to',
        'today',
        'together',
        'too',
        'took',
        'toward',
        'turn',
        'turned',
        'turning',
        'turns',
        'two',
        'u',
        'under',
        'until',
        'up',
        'upon',
        'us',
        'use',
        'used',
        'uses',
        'v',
        'very',
        'w',
        'want',
        'wanted',
        'wanting',
        'wants',
        'was',
        'way',
        'ways',
        'we',
        'well',
        'wells',
        'went',
        'were',
        'what',
        'when',
        'where',
        'whether',
        'which',
        'while',
        'who',
        'whole',
        'whose',
        'why',
        'will',
        'with',
        'within',
        'without',
        'work',
        'worked',
        'working',
        'works',
        'would',
        'x',
        'y',
        'year',
        'years',
        'yet',
        'you',
        'young',
        'younger',
        'youngest',
        'your',
        'yours',
        'z'
    );


    words = cleansed_string.match(/[^\s]+|\s+[^\s+]$/g);

    // Review all the words
    for(x=0; x < words.length; x++) {
        // For each word, check all the stop words
        for(y=0; y < stop_words.length; y++) {
            // Get the current word
            word = words[x].replace(/\s+|[^a-z]+/ig, "");   // Trim the word and remove non-alpha

            // Get the stop word
            stop_word = stop_words[y];

            // If the word matches the stop word, remove it from the keywords
            if(word.toLowerCase() == stop_word) {
                // Build the regex
                regex_str = "^\\s*"+stop_word+"\\s*$";      // Only word
                regex_str += "|^\\s*"+stop_word+"\\s+";     // First word
                regex_str += "|\\s+"+stop_word+"\\s*$";     // Last word
                regex_str += "|\\s+"+stop_word+"\\s+";      // Word somewhere in the middle
                regex = new RegExp(regex_str, "ig");

                // Remove the word from the keywords
                cleansed_string = cleansed_string.replace(regex, " ");
            }
        }
    }
    return cleansed_string.replace(/^\s+|\s+$/g, "");
}
于 2013-11-25T18:42:34.850 に答える