2017-01-08 3 views
-1

私はJavaScriptで非常に苦労しており、jQueryについては知識がありません。私はJavaScriptjQueryの助けを借りて、ページまたは本文からテキストを強調表示しようとしています。jsの助けを借りてhtmlの検索テキストを強調表示する方法は?

ハードな試行で、私はハイライトで検索コードを管理します。

私のHTMLコード:

<head> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
    <script src="/javascripts/application.js" type="text/javascript"> 
</head> 

<body> 
    Search: <input type="text" id="text-search" /> 
    <p> 
     <b>Demo </b> he new edition of KnowlEdge K12 enables your school with flexibility by wholly automating their administrative and academic processes. With IncTech’s solution for K12 schools, you can. We give you an internal infrastructure so you can share school and student information. 
    </p> 
</body> 

jQueryとJavaScriptを使用して私の完全なコード:

jQuery.fn.highlight = function(pat) { 

    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 = '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() { 

    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--; 

     } 

    } 

    return this.find("span.highlight").each(function() { 

     var thisParent = this.parentNode; 
     thisParent.replaceChild(this.firstChild, this); 
     newNormalize(thisParent); 

    }).end(); 

}; 

$(function() { 

    $('#text-search').bind('keyup change', function(ev) { 

     // pull in the new value 
     var searchTerm = $(this).val(); 

     // remove any old highlighted terms 
     $('body').removeHighlight(); 

     // disable highlighting if empty 
     if (searchTerm) { 

      // highlight the new term 
      $('body').highlight(searchTerm); 

     } 

    }); 

}); 
.highlight { 
    background-color: #fff34d; 
    -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 */ 
} 

.highlight { 
    padding:1px 4px; 
    margin:0 -4px; 
} 

詳細のあらゆる種類の私に聞かないでください。すべてのことがコメントのセクションで与えられます。みんな私を助けてください。私はあなたの例で見ることができました

+0

'見つける(検索語)' – dandavis

+0

ちょうど[mark.js]使用して...簡単な方法です(https://markjs.io )? – dude

答えて

0

唯一の問題は、この.jsファイルを探して作成取得されていないため、このハイライト機能にそれを創設されていません。このライン

<script src="/javascripts/application.js" type="text/javascript"> 

です。

はこれでそれを変更してみてくださいと異なるスクリプトタグをapplication.jsを追加します。

<script type="text/javascript"> 

実施例

.highlight { 
 
    background-color: #fff34d; 
 
    -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 */ 
 
} 
 

 
.highlight { 
 
    padding:1px 4px; 
 
    margin:0 -4px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script type="text/javascript"> 
 
    jQuery.fn.highlight = function(pat) { 
 

 
     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 = '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() { 
 

 
     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--; 
 

 
      } 
 

 
     } 
 

 
     return this.find("span.highlight").each(function() { 
 

 
      var thisParent = this.parentNode; 
 
      thisParent.replaceChild(this.firstChild, this); 
 
      newNormalize(thisParent); 
 

 
     }).end(); 
 

 
    }; 
 
    
 
</script> 
 

 
<body> 
 
    Search: <input type="text" id="text-search" /> 
 
    <p> 
 
     <b>Demo </b> he new edition of KnowlEdge K12 enables your school with flexibility by wholly automating their administrative and academic processes. With IncTech’s solution for K12 schools, you can. We give you an internal infrastructure so you can share school and student information. 
 
    </p> 
 

 
    <script type="text/javascript"> 
 

 
     $(function() { 
 

 
      $('#text-search').bind('keyup change', function(ev) { 
 

 
       // pull in the new value 
 
       var searchTerm = $(this).val(); 
 

 
       // remove any old highlighted terms 
 
       $('body').removeHighlight(); 
 

 
       // disable highlighting if empty 
 
       if (searchTerm) { 
 

 
        // highlight the new term 
 
        $('body').highlight(searchTerm); 
 

 
       } 
 

 
      }); 
 

 
     }); 
 

 
    </script> 
 

 
</body>

+0

おかげで仲間、ただ唯一のダムの事のために、私はわずか2日間しようとしています.... –

+0

Np個の@nayanchowdhuryのJI :) – Deep

関連する問題