Как получить все идентификаторы с помощью jQuery?


Я пытаюсь собрать список (массив) идентификаторов в секторе

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

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

дает мне объект jQuery, но не настоящий массив;

Я могу сделать

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

а затем использовать цикл for, чтобы поместить атрибуты id в другой массив

или

$("#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)

во всяком случае, я просто хочу посмотреть, есть ли стенография в jQuery для этого;

9 57

9 ответов:

//но я не могу получить идентификатор и назначить его массиву, который не находится в области видимости?(или я могу)

Да, вы можете!

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

в этом вся прелесть закрытие.

обратите внимание, что в то время как вы были на правильном пути, sighohwell и Клетус оба указывают на более надежные и краткие способы достижения этой цели, используя фильтры атрибут (ограничить соответствующие элементы для тех, у кого есть идентификаторы) и встроенный jQuery map():

var IDs = $("#mydiv span[id]")         // find spans with ID attribute
  .map(function() { return this.id; }) // convert to set of IDs
  .get(); // convert to instance of Array (optional)

The .метод get () возвращает массив из объекта jQuery. Кроме того, вы можете использовать .карта для проецирования на что-то перед вызовом get()

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

мое предложение?

var arr = $.map($("#mydiv [id]"), function(n, i) {
  return n.id;
});

вы также можете сделать это так:

var arr = $.map($("#mydiv span"), function(n, i) {

или

var arr = $.map($("#mydiv span[id]"), function(n, i) {

или даже так:

var arr = $("#mydiv [id]").map(function() {
  return this.id;
});

много способов, в основном.

лучший способ, который я могу придумать, чтобы ответить на это, - сделать пользовательский плагин jquery для этого:

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

тогда сделайте что-то вроде

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

это поздний ответ, но теперь есть легкий способ. Текущая версия jquery позволяет искать, если атрибут существует. Например

$('[id]')

даст вам все элементы, если они имеют идентификатор. Если вы хотите, чтобы все промежутки с id начинались с span можно использовать

$('span[id^="span"]')

Не a real массив, но obj - это все ассоциативные массивы в javascript.

Я решил не использовать реальный массив с [] и [].нажмите, потому что технически вы можете иметь несколько идентификаторов на странице, даже если это неверно. Так что просто еще один вариант в случае, если какой-то html дублировал ID

$(function() {

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

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

   });

вы можете получить идентификаторы конкретных тегов и отправить его в другой элемент annother. Например:

$("input").map(function() {
    $( "textarea" ).append(this.id+"\n");
});

он получит все входные идентификаторы и отправить его в textarea.

HTML

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

JQuery

var IDs = [];
$("#mydiv").find("span").each(function(){ IDs.push($(this).attr("id")); });
for(i=1;i<13;i++)     
{

   alert($("#tdt"+i).val());  

}