2012-02-09 12 views

risposta

15

Non per impostazione predefinita, ma è possibile aggiungere i propri pseudo-selettori tramite $.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

Oh, wow. Grazie mille. Apprezzo il tuo contributo. Potresti per favore approfondire il tuo processo? Qual è lo scopo di "set" e "i" in ogni funzione? E quali sono i dati [3]? Grazie ancora. – user717236

+2

@ user717236: La funzione impostata in '$ .expr [": "]' ha passato diversi argomenti in modo da decidere se un determinato elemento debba passare o meno. 'elem' è l'elemento da testare e' i' è un contatore. 'data' è una matrice che contiene i valori del selettore; 'data [3]' sarà la stringa '" foo "' se selezioni usando ': starts-with ('foo')'. 'set' è un insieme di tutti gli elementi che vengono filtrati dalla funzione, quindi ad es. 'div: starts-with ('foo')' passerà tutti i 'div's come' set', che saranno poi filtrati dalla funzione. – pimvdb

+0

Grazie per la spiegazione, @pimvdb. C'è una risorsa che posso trovare che fornisce una discussione più approfondita su questo argomento? Ad esempio, hai specificato quattro parametri in ciascuna funzione. Queste variabili sono tutte correlate alla dichiarazione del metodo find di jQuery (ad es. Function (a) {var b = this, c, d; ...})? – user717236

12

Quando non si desidera estendere jQuery, è possibile utilizzare la funzione filter() per creare la contiene funzionalità:

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

O creare una funzione startsWith con un'espressione regolare:

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

L'estremità della funzione Con è abbastanza simile:

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

Nota l'uso di $.trim() perché l'HTML può contenere molto spazio bianco.