[Javascript] Come ottenere tutti gli ID con jQuery?


Answers

Il metodo .get () restituirà un array da un oggetto jQuery. Inoltre puoi usare .map per proiettare qualcosa prima di chiamare get ()

var idarray = $("#myDiv")
             .find("span") //Find the spans
             .map(function() { return this.id; }) //Project Ids
             .get(); //ToArray
Question

Sto cercando di raccogliere una lista (array) di ID in un settore

<div id="mydiv">
 <span id='span1'>
 <span id='span2'>
</div>

$("#mydiv").find("span"); 

mi dà un oggetto jQuery, ma non un vero array;

posso fare

var array = jQuery.makeArray($("#mydiv").find("span"));

e quindi utilizzare un ciclo for per inserire gli attributi id in un altro array

o posso fare

$("#mydiv").find("span").each(function(){}); //but i cannot really get the id and assign it to an array that is not with in the scope?(or can I)

Ad ogni modo, voglio solo vedere se c'è una scorciatoia in jQuery per farlo;




Il modo migliore a cui riesco a pensare è di creare un plugin jquery personalizzato per farlo:

jQuery.fn.getIdArray = function() {
  var ret = [];
  $('[id]', this).each(function() {
    ret.push(this.id);
  });
  return ret;
};

Quindi fai qualcosa come

var array = $("#mydiv").getIdArray();



HTML

<div id="mydiv">
 <span id='span1'>
 <span id='span2'>
</div>

JQuery

var IDs = [];
$("#mydiv").find("span").each(function(){ IDs.push($(this).attr("id")); });



Non un vero array, ma gli objs sono tutti array associativi in ​​javascript.

Ho scelto di non utilizzare un array reale con [] e [] .push perché tecnicamente, puoi avere più ID su una pagina anche se non è corretto farlo. Quindi, solo un'altra opzione nel caso in cui alcuni html hanno ID duplicati

$(function() {

       var oArr = {};
       $("*[id]").each(function() {
           var id = $(this).attr('id');
           if (!oArr[id]) oArr[id] = true;
       });

       for (var prop in oArr)
           alert(prop);

   });