2017-12-31 182 views
8

मैं निर्धारित करने के लिए एक स्ट्रिंग jQuery के inArray समारोह है, जो यहाँ https://stackoverflow.com/a/18867667/5798798निर्धारित करने के लिए एक स्ट्रिंग एक सरणी

नीचे दिखाया गया है मेरे उदाहरण में उपयोग करके एक सरणी से एक शब्द है कोशिश कर रहा हूँ से एक शब्द है असमर्थ है, इसे कंसोल में 'हाय' प्रिंट करना चाहिए क्योंकि 'हैलो' शब्द दो बार स्ट्रिंग में है और सरणी में है, हालांकि यह नहीं है।

var array = ["Hello", "Goodbye"]; 
 

 
a = document.getElementsByClassName("here"); 
 

 
for (i = 0; i < a.length; i++) { 
 
    itag = a[i].getElementsByTagName("i")[0]; 
 
    if (jQuery.inArray(itag.innerHTML, array) !== -1) { 
 
    console.log('hi'); 
 
    } 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="here"><i><a href="link.php">Hello</a> | <a href="link2.php">Example</a></i> 
 
</div> 
 

 
<div class="here"><i><a href="link.php">Hey</a> | <a href="link2.php">Hello</a></i> 
 
</div>

+0

तर्क पीछे की ओर है। सरणी के माध्यम से लूप की आवश्यकता है और लंबी स्ट्रिंग के खिलाफ प्रत्येक शब्द की जांच करें।आप यह देखने का प्रयास कर रहे हैं कि सरणी – charlietfl

+0

में एक लंबी HTML स्ट्रिंग मौजूद है या नहीं, आपको इटैलिक के अंदर तत्वों के माध्यम से लूप करना होगा ... और उनके आंतरिक HTML – Ctznkane525

उत्तर

8

बदलें array.some(text => itag.textContent.includes(text)) साथ inArray कार्य करते हैं।

प्रचार var or const or let के माध्यम से सभी चर।

के बजाय innerHTML उपयोग textContent। यह सामग्री को पार्स करने का प्रयास नहीं करेगा और तेज़ी से काम करेगा।

var array = ["Hello", "Goodbye"]; 
 

 
var a = document.getElementsByClassName("here"); 
 

 
for (var i = 0; i < a.length; i++) { 
 
    var itag = a[i].getElementsByTagName("i")[0]; 
 
    var textContent = itag.textContent; 
 
    if(array.some(text => textContent.includes(text))) { 
 
     console.log(textContent); 
 
    } 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="here"><i><a href="link.php">Hello</a> | <a href="link2.php">Example</a></i> 
 
</div> 
 

 
<div class="here"><i><a href="link.php">Hey</a> | <a href="link2.php">Hello</a></i> 
 
</div>

+0

जांचें क्या कोई मौका है कि आप कोड 'if (array। कुछ (text => textContent.includes (टेक्स्ट))) {'कृपया मुझे? –

+0

यह जांचता है कि 'arrayContent.includes (text)' 'array 'में कम से कम एक तत्व के लिए सत्य लौटाता है या नहीं। हमारे मामले में, यदि 'textContent' –

+0

में 'सरणी' का कम से कम एक आइटम शामिल है, तो मैं देखता हूं। क्या आप मुझे इस उदाहरण में '=>' के उद्देश्य को जानने में सक्षम हैं? –

2

आप जाँच कर रहे हैं कि क्या innerHTML सरणी में है या नहीं।

वास्तव में आप की जाँच करनी चाहिए कि क्या भीतरी एचटीएमएल सरणी तत्व के किसी भी होते हैं।

तो अगर आप कोड के लिए ऊपर बयान कनवर्ट करते हैं, यह होना चाहिए

var array = ["Hello", "Goodbye"]; 
 

 
a = document.getElementsByClassName("here"); 
 

 
for (i = 0; i < a.length; i++) { 
 
    debugger; 
 
    var itag = a[i].getElementsByTagName("i")[0]; 
 
    for (var k in array) { 
 
    if(itag.innerHTML.indexOf(array[k]) > -1){ 
 
    console.log('hi'); 
 
    } 
 
    } 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="here"><i><a href="link.php">Hello</a> | <a href="link2.php">Example</a></i> 
 
</div> 
 

 
<div class="here"><i><a href="link.php">Hey</a> | <a href="link2.php">Hello</a></i> 
 
</div>

0

सरल दृष्टिकोण शब्द सरणी पर पाश और :contains चयनकर्ता का उपयोग है

var array = ["Hello", "Goodbye"], 
 
    $links = $('.here i a'); 
 

 
$.each(array, function(i, word){ 
 
    $links.filter(':contains(' + word +')').addClass('word-match'); 
 
})
.word-match {color:red}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="here"><i><a href="link.php">Hello</a> | <a href="link2.php">Example</a></i> 
 
</div> 
 

 
<div class="here"><i><a href="link.php">Hey</a> | <a href="link2.php">Hello</a></i> 
 
</div>

0

वास्तव में कोई जवाब नहीं, बल्कि आपके कोड में और सुधार के साथ @SurenSrapyan answer का विस्तार। document.querySelectorAll('.here i:first-of-type');

और innerHTML और textContent कर रहे हैं दोनों गेटर कि मूल्य बनाने आप इसे से लाने के रूप में:

इसके बजाय इस नेस्टेड getElementsByTagName और getElementsByClassName यहाँ से निपटने का

, आप एक ही सीएसएस-चयनकर्ता नोड्स को लक्षित रूप में लिख सकते डोम ट्रेवरिंग। तो वैरिएबल में एक बार वैल्यू को बेहतर तरीके से स्टोर करें, इसे लूप के अंदर लाने के बजाय जहां इसे बार-बार बनाया जाना है; ठीक है, जब तक कि मूल्य बदल नहीं सकता है।

var words = ["Hello", "Goodbye"]; 
 
var nodes = document.querySelectorAll('.here i:first-of-type'); 
 

 
for(var i=0; i<nodes.length; ++i){ 
 
    var node = nodes[i]; 
 
    var textContent = node.textContent; 
 
    if(words.some(word => textContent.includes(word))) { 
 
     console.log(node, textContent); 
 
    } 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="here"> 
 
    <i><a href="link.php">Hello</a> | <a href="link2.php">Example</a></i> 
 
    <i>Hello, not matching me, as I'm not the first &lt;i&gt; in .here</i> 
 
</div> 
 

 
<div class="here"><i><a href="link.php">Hey</a> | <a href="link2.php">Hello</a></i> 
 
</div>

0

यह पता लगाने के लिए सबसे खूबसूरत तरीका स्पष्ट रूप से एक रेगुलर एक्सप्रेशन

var array = ["Hello", "Goodbye"]; 

    var a = document.getElementsByClassName("here"); 
    Array.prototype.forEach.call(a, function(node) { 
     var itag = node.getElementsByTagName("i")[0] 
     if (itag.innerHTML.match(new RegExp(array.join('|'), 'gi'))) { 
     console.log('hi') 
     } 
    }); 
संबंधित मुद्दे