2009-05-28 15 views
8
$('#servertable td:eq(' + server + ')') 

यह केवल 1 (पहला मुझे लगता है) मैच, सभी मैचों को कैसे ढूंढें। बीटीडब्ल्यू। टीडी: इसमें मेरे लिए काम नहीं करेगा।jquery सभी सटीक टीडी मैचों को खोजने के लिए

+3

आप HTML मार्कअप का एक सा दिखा सकते हैं? क्या आप वाकई एक मैच ढूंढ रहे हैं? आपको कैसे मालूम? क्या आप संग्रह में कितने तत्व लौटाए हैं, या आप परिणामों को हाइलाइट करने के लिए कुछ कर रहे हैं? थोड़ा और कोड मदद करेगा। – Nosredna

+1

आप ईक कर रहे हैं, जो केवल एक तत्व से मेल खा सकता है, क्योंकि यह इसे इंडेक्स द्वारा चुनता है। यह $ ('# servertable td') का उपयोग करने के बराबर है। Eq (#) या $ ('# servertable td') [#] –

उत्तर

14

eq उम्मीद एक संख्यात्मक सूचकांक केवल एक ही पंक्ति वापस जाने के लिए। यदि आप अपनी सामग्री से टीडी से मेल खाना चाहते हैं, तो आपको :contains चयनकर्ता का उपयोग करना होगा। कह रही है "यह काम नहीं करता" और इसे दूर फेंक समस्या का सही दृष्टिकोण, चयनकर्ता के रूप में (सबसे अधिक संभावना) की गलती नहीं है नहीं है (अपने मामले ध्यान दें करो संवेदनशील है, यह हो सकता है ...)

किसी भी तरह, अगर आप इस तरह एक मेज है:

<table> 
    <tr> 
    <td>Hello</td> 
    <td>World</td> 
    </tr> 
    <tr> 
    <td>World</td> 
    <td>Hello</td> 
    </tr> 
    <tr> 
    <td>Hello</td> 
    <td>Hello</td> 
    </tr> 
</table> 

इस jQuery कोड:

$(function() { 
    $("td:contains('Hello')").css('color','red'); 
}); 

सभी कोशिकाओं "हैलो" लाल के साथ हो जाएगा। Demo

आप एक केस संवेदी मैच की जरूरत है, तो आप ऐसा कर सकता है, filter फ़ंक्शन का उपयोग:

$(function() { 
    var search = 'HELLO'.toLowerCase(); 
    $("td").filter(function() { 
     return $(this).text().toLowerCase().indexOf(search) != -1; 
    }).css('color','red'); 
}); 

आप सेल के सटीक सामग्री से मेल खाने की जरूरत है, आप के लिए कुछ इसी तरह इस्तेमाल कर सकते हैं इसके बाद के संस्करण:

$(function() { 
    var search = 'HELLO'.toLowerCase(); 
    $("td").filter(function() { 
     return $(this).text().toLowerCase() == search; 
    }).css('color','red'); 
}); 

उपरोक्त मामले असंवेदनशील (दोनों खोज और सामग्री तुलना करते समय को लोअर केस में बदल कर) नहीं तो आप सिर्फ उन अगर आप केस संवेदनशीलता चाहते निकाल सकते हैं है। Demo

+2

ठीक है, तो अगर आपके टेबल में क्या है: हैलो दोस्त? क्या होने जा रहा है "हैलो दोस्त" लाल हो जाएगा, लेकिन अगर आप केवल "हैलो" को सटीक मिलान करना चाहते हैं तो क्या होगा। – ra170

+0

उत्तर में जोड़ने के लिए: चूंकि आपको केवल टैग की सामग्री की आवश्यकता है, इसलिए आपको _this_ को लपेटने की ज़रूरत नहीं है, आप इसका उपयोग कर सकते हैं। इसे वापस करें .innerHTML.toLowerCase() == खोज' –

+0

@ ra170 इसमें एक्सक्टेक्ट एक्सटेंशन है I नीचे जोड़ा गया है "हैलो" की सटीक स्ट्रिंग को खोजने के लिए अपने परीक्षण केस को हल करेगा और "हैलो दोस्त" – Shane

0
$('#servertable td') 

सभी टीडी तत्व पाएंगे, लेकिन यह पूरी तरह से स्पष्ट नहीं है कि आप क्या उम्मीद करते हैं।

2

मैं गलत हो सकता है, लेकिन :eq positional selector एक पूर्णांक n एक वें मिलान तत्व पाता है लेता है।

तो अगर आप ने कहा कि टीडी: eq (1) - आप तालिका में 2 टीडी तत्व मिल चाहते हैं (दूसरा क्योंकि पहली सूचकांक शून्य/0 है)।

मेरा अनुमान है कि आप :contains selector का उपयोग नहीं करना चाहते हैं क्योंकि आप एक सटीक स्ट्रिंग मैच की तलाश में हैं और आंशिक मिलान नहीं चाहते हैं।

मुझे पता है कि jQuery चयनकर्ता में बनाया गया है कि अपनी आवश्यकताओं को पूरा करेगा (यदि हां, तो कृपया मुझे सही करें) नहीं हूँ। आप एक एक्सटेंशन के रूप में जोड़ सकते हैं या किसी अन्य विधि का उपयोग कर सकते हैं, जैसे कि आपके लिए खोज करने के लिए एक विशेषता चयनकर्ता।

आप सृजित HTML नियंत्रित करने में सक्षम हैं, तो आप एक आईडी विशेषता प्रत्येक टीडी के लिए इतना की तरह जोड़ सकते हैं:

<table id="servertable" border="1"> 
     <thead> 
      <tr><th>Server</th><th>Memory</th></tr> 
     </thead> 
     <tbody> 
      <tr><td id="server_mars">Mars</td><td>4 GB</td></tr> 
      <tr><td id="server_venus">Venus</td><td>1 GB</td></tr> 
      <tr><td id="server_jupiter">Jupiter</td><td>2 GB</td></tr> 
      <tr><td id="server_uranus">Uranus</td><td>8 GB</td></tr> 
      <tr><td id="server_mars_2010">Mars_2010</td><td>4 GB</td></tr> 
     </tbody> 
    </table> 
    <form> 
     <label for="server">Find:</label><input type="text" id="server" /> 
     <button id="find">Find</button> 
    </form> 

निम्न विशेषता चयनकर्ता तालिका में सही टीडी का पता लगाने जाएगा:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
    <script type="text/javascript"> 
    $(document).ready(function() { 
     $("#find").click(function() { 
      var server = $("#server").val(); 
      $("#servertable td").css("background-color", ""); // reset 
      $("#servertable td[id='server_" + server.toLowerCase() + "']").css("background-color", "#FFFF00"); 
      return false; 
     }); 
    }); 
    </script> 

आप के बजाय पूरी पंक्ति टीडी कि आप देख रहे हैं है कि लक्षित करना चाहते हैं, तो आप जोड़ सकते हैं अतिरिक्त चयनकर्ताओं:

 $("#servertable tbody tr").css("background-color", ""); 
     $("#servertable tbody tr:has(td[id='server_" + server.toLowerCase() + "'])").css("background-color", "#FFFF00"); 

टैब टैग पूरी तरह से जरूरी नहीं है, यह तालिका तालिका में पंक्तियों और पंक्तियों के बीच पंक्तियों के बीच अंतर करने में मदद करता है।

0

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

jQuery के पास डिफ़ॉल्ट रूप से ऐसा कोई matcher नहीं है। समाधान अपने खुद के matcher परिभाषित करने के लिए है। समस्या से निपटने के लिए मोटे द्वारा इस उत्कृष्ट ब्लॉग post देखें।

1

प्रयास करें: containsExact

http://wowmotty.blogspot.com/2010/05/jquery-selectors-adding-contains-exact.html

$.extend($.expr[":"], { 
containsExact: $.expr.createPseudo ? 
    $.expr.createPseudo(function(text) { 
    return function(elem) { 
    return $.trim(elem.innerHTML.toLowerCase()) === text.toLowerCase(); 
    }; 
    }) : 
    // support: jQuery <1.8 
    function(elem, i, match) { 
    return $.trim(elem.innerHTML.toLowerCase()) === match[3].toLowerCase(); 
    }, 

containsExactCase: $.expr.createPseudo ? 
    $.expr.createPseudo(function(text) { 
    return function(elem) { 
    return $.trim(elem.innerHTML) === text; 
    }; 
    }) : 
    // support: jQuery <1.8 
    function(elem, i, match) { 
    return $.trim(elem.innerHTML) === match[3]; 
    }, 

containsRegex: $.expr.createPseudo ? 
    $.expr.createPseudo(function(text) { 
    var reg = /^\/((?:\\\/|[^\/]))\/([mig]{0,3})$/.exec(text); 
    return function(elem) { 
    return RegExp(reg[1], reg[2]).test($.trim(elem.innerHTML)); 
    }; 
    }) : 
    // support: jQuery <1.8 
    function(elem, i, match) { 
    var reg = /^\/((?:\\\/|[^\/]))\/([mig]{0,3})$/.exec(match[3]); 
    return RegExp(reg[1], reg[2]).test($.trim(elem.innerHTML)); 
    } 

}); 
+0

आपके उत्तर में मेरे उत्तर से एक लिंक है और मूल रूप से कुछ और नहीं है। अच्छा सारांश :) – Timo

+0

@TimoLehto ने साल पहले से आपकी टिप्पणी देखी थी। सिर्फ आपके जवाब की प्रतिलिपि नहीं बनाई, आपके लिंक को भी नोटिस नहीं किया। मेरे उत्तर में कोड उदाहरण जोड़ा गया – Shane

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