2012-02-09 10 views

Odpowiedz

15

Nie domyślnie, o ile wiem, ale można dodać własne pseudo-selektory poprzez $.expr[":"]: http://jsfiddle.net/h6KYk/.

$.extend($.expr[":"], { 
    "starts-with": function(elem, i, data, set) { 
     var text = $.trim($(elem).text()), 
      term = data[3]; 

     // first index is 0 
     return text.indexOf(term) === 0; 
    }, 

    "ends-with": function(elem, i, data, set) { 
     var text = $.trim($(elem).text()), 
      term = data[3]; 

     // last index is last possible 
     return text.lastIndexOf(term) === text.length - term.length; 
    } 
}); 
+0

Och, wow. Dziękuję Ci bardzo. Doceniam twój wkład. Czy mógłbyś rozwinąć swój proces? Jaki jest cel "zestawu" i "i" w każdej funkcji? A czym są dane [3]? Jeszcze raz dziękuję. – user717236

+2

@ user717236: Funkcja ustawiona w '$ .expr [": "]' jest przekazywana kilka argumentów, aby zdecydować, czy dany element ma przejść. 'elem' jest elementem do testowania, a' i' jest licznikiem. "dane" to tablica zawierająca wartości selektora; 'data [3]' będzie łańcuchem '' foo' 'jeśli wybierzesz używając': starts-with ('foo') '. 'set' to zbiór wszystkich elementów, które są filtrowane przez twoją funkcję, np. 'div: starts-with ('foo')' przejdzie przez wszystkie 'div's jako' set', które następnie są filtrowane przez funkcję. – pimvdb

+0

Dziękuję za wyjaśnienie, @pimvdb. Czy istnieje zasób, który mogę sprawdzić, co zapewnia bardziej dogłębną dyskusję na ten temat? Na przykład w każdej funkcji określono cztery parametry. Czy te zmienne są w ogóle związane z deklaracją metody find jQuery (tj. Funkcja (a) {var b = this, c, d; ...})? – user717236

12

Jeśli nie chcesz przedłużyć jQuery, można użyć funkcji filter() aby stworzyć zawiera funkcjonalność:

$("div").find("span").filter(function() { 
    return $(this).text().indexOf(text) >= 0; 
}); 

Albo utworzyć funkcję startsWith z wyrażenia regularnego:

var expression = new RegExp('^' + text); 
$("div").find("span").filter(function() { 
    return expression.test($.trim($(this).text())); 
}); 

Końce z funkcją są bardzo podobne:

var expression = new RegExp(text + '$'); 
$("div").find("span").filter(function() { 
    return expression.test($.trim($(this).text())); 
}); 

Uwaga wykorzystanie $.trim() ponieważ HTML może zawierać wiele spacji.