2010-07-18 17 views
8

मेरे पास इस तरह के स्वरूपण के साथ 200 से अधिक लिंक वाले एक पृष्ठ हैं।टेक्स्ट खोज?

<h1> 
    <a href="somelink">Somelink</a> 
    some text that explain the meaning of the link. 
</h1> 

अब, इस लिंक के माध्यम से खोजना थोड़ा आसान बनाने के लिए, मैंने एक खोज बॉक्स डाला है।

मेरी आवश्यकता है कि आप इस टैग को खोज सकें और से संबंधित लिंक ढूंढें और शेष लिंक छुपाएं।

जावास्क्रिप्ट में इसे कैसे करें? (मुझे मूल जावास्क्रिप्ट/jquery सामान पता है लेकिन पूर्ण पाठ खोज कैसे करें?) मुझे प्रासंगिक के अनुसार सॉर्टिंग की आवश्यकता नहीं है, बस फ़िल्टर करें और छुपाएं दिखाएं पर्याप्त है।

+0

क्या वे सभी मौके से एच 1 टैग में हैं? –

+0

पिछली गिनती के लिए कई एच 1 टैग, 200 हैं। मैं नहीं चाहता कि एक सर्वर पक्ष गति कारणों की खोज करे, और सभी 200 लिंक के संयुक्त आकार को शायद ही कभी 10 केबी पार करें। – iamgopal

उत्तर

5

से नकल उम्मीद है कि आप इस उपयोगी पाते है। यह शायद सुरुचिपूर्ण या सबसे कुशल नहीं है लेकिन यह आपको कई खोज शब्द दर्ज करने देगा और आंशिक मिलान (जो चाहता है या नहीं भी हो सकता है) देता है। जिस तरह से मैंने खोज बटन पर क्लिक किया है, वैसे ही यह आपके सभी खोज शब्दों से मेल खाने वाले सभी अन्य तत्वों को छुपाएगा, लेकिन आप परिणामों को ऐरे में तत्वों के साथ जो भी चाहते हैं उसे करने के लिए इसे संशोधित कर सकते हैं। मैं इसका बिल्कुल उपयोग करने की अनुशंसा नहीं करता हूं लेकिन उम्मीद है कि यह आपको संदर्भ का एक बिंदु देगा कि आप अपने आप को कैसे कार्यान्वित करना चाहते हैं (यदि आप त्वरित खोज के अलावा किसी अन्य समाधान के साथ जाना चुनते हैं)।

<html> 
<head> 
<script src="http://code.jquery.com/jquery-latest.min.js"></script> 
<script type='text/javascript' language='javascript' > 
$(document).ready(function() { 
    var links = new Array(); 
    $("h1").each(function(index, element) {   
     links.push({ 
      text: $(this).text(), 
      element: element 
     }); 
    }); 

    $("#searchButton").click(function() { 
     var query = $("#searchBox").val(); 
     var queryTerms = query.split(' '); 

     var results = new Array(); 
     for(var i = 0; i < queryTerms.length; i++) { 
      for(var j = 0; j < links.length; j++) { 
       if (links[j].text.indexOf(queryTerms[i]) > -1) { 
        results.push(links[j].element);      
        } 
      } 
     } 

     $("h1").each(function(index, element) { 
      this.style.display = 'none'; 
     }); 
     for(var i = 0; i < results.length; i++) { 
      results[i].style.display = 'block'; 
     } 

    });  

}); 
</script> 

</head> 
<body> 
<p> 
<input id="searchBox" type="text" /> 
<input type="button" id="searchButton" value="Search" /> 
</p> 

<h1> 
    <a href="somelink">Somelink1</a> 
    asdf 
</h1> 
<h1> 
    <a href="somelink">Somelink2</a> 
    ssss 
</h1> 
<h1> 
    <a href="somelink">Somelink3</a> 
    3333 
</h1> 
<h1> 
    <a href="somelink">Somelink4</a> 
    232323 
</h1> 
<h1> 
    <a href="somelink">Somelink5</a> 
    fffff 
</h1> 

</body> 
</html> 
7

आप सभी h1 टैग भीतरी एचटीएमएल प्राप्त करके बताना कर सकते हैं और indexOf करते हैं, या आप jQuery उपयोग कर सकते हैं यह एक कस्टम contains कार्यक्षमता है, जो दिए गए पाठ होने तत्वों रिटर्न दिया है।

यहाँ एक उदाहरण jQuery डॉक्स

<!DOCTYPE html> 
<html> 
<head> 
    <script src="http://code.jquery.com/jquery-latest.min.js"></script> 
</head> 
<body> 

<div>John Resig</div> 

<div>George Martin</div> 
<div>Malcom John Sinclair</div> 
<div>J. Ohn</div> 


<script> 
$("div:contains('John')").css("text-decoration", "underline"); 
    </script> 
</body> 
</html> 
+0

वाह, यह वास्तव में अच्छा है, मुझे इसके बारे में पता नहीं था! – BrunoLM

+0

तो यहां मैं एक ऐसे समाधान पर काम कर रहा हूं जिसमें एक सरणी बनाने और पाठ के लिए उस सरणी को खोजना शामिल है, इससे मेरा समाधान फूला हुआ और मंद हो जाता है। सादगी के लिए +1। –

+0

यह एकाधिक शब्दों के लिए कैसे काम करता है? (क्या यह उन्हें तोड़ देता है और पूरी स्ट्रिंग को खोजता है या खोजता है?) – iamgopal

संबंधित मुद्दे