2012-02-09 13 views

Respuesta

15

No, por defecto, hasta donde yo sé, pero puede agregar sus propios pseudo selectores a través de $.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. Muchas gracias. Aprecio tu aporte. ¿Podrían explicar su proceso? ¿Cuál es el propósito de "establecer" e "i" en cada función? ¿Y qué son los datos [3]? Gracias de nuevo. – user717236

+2

@ user717236: La función que establece en '$ .expr [": "]' se pasa varios argumentos para decidir si un determinado elemento debe pasar o no. 'elem' es el elemento a probar, y' i' es un contador. 'data' es una matriz que contiene valores del selector; 'data [3]' será la cadena '" foo "' si selecciona usar ': starts-with ('foo')'. 'set' es un conjunto de todos los elementos que filtra su función, por ejemplo, 'div: starts-with ('foo')' pasará todos los 'div's como' set', que luego serán filtrados por la función. – pimvdb

+0

Gracias por su explicación, @pimvdb. ¿Hay algún recurso que pueda consultar que brinde un debate más profundo sobre este tema? Por ejemplo, especificó cuatro parámetros en cada función. ¿Están estas variables relacionadas con la declaración de método de búsqueda de jQuery (es decir, la función (a) {var b = this, c, d; ...})? – user717236

12

Cuando no se desea extender jQuery, puede utilizar la función filter() para crear la funcionalidad contiene:

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

O crear una función startsWith con una expresión regular:

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

La función endsWith es bastante similar:

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

Tenga en cuenta el uso de $.trim() porque HTML puede contener una gran cantidad de espacios en blanco.