2011-01-03 8 views
7

मेरे पास एक चर है जिसमें कुछ पाठ है, कुछ HTML, मूल रूप से एक स्ट्रिंग हो सकता है। मुझे उस चर को अलग करने के लिए एक विशिष्ट स्ट्रिंग के लिए वेरिएबल को खोजने की ज़रूरत है, यदि इसमें निहित है। यहाँ मैं क्या करना है कोशिश कर रहा हूँ का एक टुकड़ा है, स्पष्ट रूप से काम नहीं करता है :)jQuery एक चर में पाठ के लिए खोज?

$.each(data.results, 
    function(i, results) { 
    var text = this.text     
    var pattern = new RegExp("^[SEARCHTERM]$"); 
    if(pattern.test(text)) 
    alert(text); //was hoping this would alert the SEARCHTERM if found... 
+0

जब आप 'अलर्ट (this.text) 'करते हैं तो यह क्या कहता है? – ajreal

उत्तर

9

आप .indexOf() बजाय इस्तेमाल कर सकते हैं खोज करने के लिए।

यदि स्ट्रिंग नहीं मिली है, तो यह -1 देता है। यदि यह पाया जाता है, तो यह पहले शून्य-आधारित इंडेक्स देता है जहां यह स्थित था।

var text = this.text; 
var term = "SEARCHTERM"; 

if(text.indexOf(term) != -1) 
    alert(term); 

आप एक सटीक मिलान, ^ और $ के आपके उपयोग मतलब करने लगता है, जिसके लिए उम्मीद कर रहे थे, तो आप सिर्फ एक === तुलना कर सकता है।

var text = this.text; 
var term = "SEARCHTERM"; 

if(text === term) 
    alert(term); 

संपादित करें: अपनी टिप्पणी के आधार पर, आप एक सटीक मिलान चाहते हैं, लेकिन === काम नहीं कर रहा, indexOf() है, जबकि। यह कभी-कभी मामला होता है यदि कुछ सफेद जगह है जिसे छंटनी की जरूरत है।

jQuery's jQuery.trim() method का उपयोग करके व्हाइटस्पेस को ट्रिम करने का प्रयास करें।

var text = $.trim(this.text); 
var term = "SEARCHTERM"; 

if(text === term) 
    alert(term); 

अगर यह काम नहीं करता, मैं प्रवेश this.text कंसोल के लिए अगर यह मूल्य आप उम्मीद है देखने के लिए सलाह देते हैं।

var match = text.match(pattern); 
if(match) { 
    alert(match[0]); 
} 

अधिक जानकारी के लिए .match() के लिए दस्तावेज़ देखें:

+0

धन्यवाद, इसलिए मैं खोज शब्द के लिए एक सटीक मिलान की तलाश में हूं, लेकिन === तुलना काम नहीं कर रही थी। इंडेक्सऑफ का उपयोग करना, हालांकि, करता है। वह क्यों होगा? – thatryan

+0

@ थिएट्रीन: यह 'this.text' के मान पर निर्भर करेगा। यह जानने के बिना कि 'data.results' क्या है, मैं निश्चित रूप से नहीं कह सकता, लेकिन मुझे लगता है कि शायद कुछ सफेद जगह है जिसे छंटनी की जरूरत है।'IndexOf() 'स्ट्रिंग में किसी आंशिक मिलान का पता लगाएगा, इसलिए यह कई बार झूठी सकारात्मक दे सकता है, जबकि व्हाइटस्पेस सहित कोई अंतर होने पर' === 'विफल हो जाएगा। मैंने अपना जवाब अपडेट किया। – user113716

+0

@ थिएट्रीन: क्या आपको यह समस्या मिली है? – user113716

2

आप सबस्ट्रिंग के लिए खोज करने के लिए रेगुलर एक्सप्रेशन का उपयोग कर रहे हैं, तो आप इस तरह मैच पा सकते हैं।

ध्यान दें कि यदि आप स्ट्रिंग "[SEARCHTERM]" (ब्रैकेट युक्त खोज शब्द) की खोज करने का प्रयास कर रहे हैं, तो आपकी खोज विधि काम नहीं करेगी क्योंकि ब्रैकेट नियमित अभिव्यक्तियों के भीतर एक विशेष अर्थ रखते हैं। इसके बजाय, .indexOf() का उपयोग करें:

var index = text.indexOf("[SEARCHTERM]"); 
if(index != -1) { 
    alert("Search term found"); 
} 

हालांकि, अगर आप सिर्फ एक सटीक मिलान (और कुछ नहीं लेकिन खोज पद स्ट्रिंग आप जाँच कर रहे हैं में है) खोजने की कोशिश कर रहे हैं, तो आप सिर्फ तार की तुलना करनी चाहिए:

if(text == "[SEARCHTERM]") { 
    alert("Search term found"); 
} 
0

यहां "काम नहीं करता" का अर्थ क्या है?

ध्यान रखें कि आपको if कथन के साथ ब्रेसिज़ ({}) का उपयोग करना चाहिए। कुछ ब्राउज़र आपको उन्हें याद करने की अनुमति देंगे लेकिन आपको उन्हें सही होने और सबकुछ का समर्थन करने के लिए शामिल करना चाहिए।

+0

ओह, और आप उस पंक्ति पर अर्द्ध-कोलन खो रहे हैं जिसमें आप चर 'test' प्रारंभ करते हैं। –

+0

* "कुछ ब्राउज़र आपको अनुमति देंगे ..." * उन्हें छोड़कर वास्तव में भाषा विनिर्देशन द्वारा अनुमति दी जाती है, लेकिन उन्हें शामिल करने के लिए निश्चित रूप से अच्छा अभ्यास है। – user113716

+1

@ पैट्रिक dw: आह, ओह! उसके लिए धन्यवाद। मैं स्वीकार करता हूं कि मैं हमेशा मानता हूं; फिर भी, आईई 6 जैसे व्यापक ब्राउज़र आईएमई से खुश नहीं होंगे, इसलिए उन्हें अंदर रखने के लिए सबसे अच्छा है। –

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