2017-01-08 2 views
-1

Прошло очень очень тяжелое время с JavaScript, и у меня есть нулевые знания с jQuery. Я пытаюсь выделить текст со страницы или из тела с помощью JavaScript и jQuery.Как выделить текст поиска в html с помощью js?

С жесткой попыткой я управляю поисковым кодом с подсветкой.

Мой 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

'найти (SEARCHTERM)' это легкий путь ... – dandavis

+0

Просто используйте [mark.js] (https://markjs.io)? – dude

ответ

0

Единственная проблема, я мог видеть в вашем примере в этой строке

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

, который ищет для этого .js и не учредительной его из-за этого кульминационных функцию не получает созданы.

Попробуйте изменить его и добавьте 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

спасибо брату, только для плотины, я просто пытаюсь в течение двух дней .... –

+0

Np @nayanchowdhury ji :) – Deep

Смежные вопросы