¿Cuál sería la mejor forma de obtener todos los divs que tengan cualquier clase que comience con input
? En otras palabras, a
y b
deben devolverse de lo que está debajo, pero no c
.jQuery - tiene clase que comienza con
<div id="a" class="input1 foo"></div>
<div id="b" class="foo input2"></div>
<div id="c" class="xinput3 foo"></div>
La forma ostensible, que sorprendentemente fue aceptado here, es hacer $("div[class^='input']");
pero por supuesto que pierde b
. Y, por supuesto, $("div[class*='input']");
dará un falso positivo en c
.
Lo mejor que pude llegar a este engendro fue
function getAllInputDivs() {
return $("div").filter(function (i, currentDiv) {
return $.grep($(currentDiv).attr("class").split(" "), function (val) {
return val.substr(0, "input".length) === "input";
}).length > 0;
});
}
¿Hay una manera más limpia? Esto es un working fiddle de lo anterior
No creo que los nombres de clase sean la mejor opción cuando se tienen cosas como input1 y input2. Si la entrada es lo suficientemente única para ser enumerada de esa manera, puede usar identificadores o nombres que se pueden seleccionar con '$ (" [id^= entrada] ")' –
@KevinB - probablemente tenga razón. No estoy seguro de si hay un buen caso de uso para esto o no. En este momento es solo una pregunta teórica para ver si se puede hacer. –
Pregunta similar: [jQuery selector para apuntar a cualquier nombre de clase (de presente múltiple) comenzando con un prefijo?] (Http://stackoverflow.com/questions/4524412/jquery-selector-to-target-any-css-name- of-multiple-present-starting-with-a-pre) pero no he hecho expresiones de selector personalizadas antes, así que me gustan bastante las respuestas a esta pregunta :) – BoltClock