Как получить все идентификаторы с помощью jQuery? - PullRequest
61 голосов
/ 06 мая 2009

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

<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 ]

133 голосов
/ 06 мая 2009

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

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

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

Это красота замыканий .

Обратите внимание, что пока вы были на правильном пути, sighohwell и cletus оба указывают на более надежные и лаконичные способы достижения этого, используя преимущества атрибутных фильтров (для ограничения элементов с идентификаторами) и встроенная в 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)
33 голосов
/ 06 мая 2009

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

var idarray = $("#myDiv")
             .find("span") //Find the spans
             .map(function() { return this.id; }) //Project Ids
             .get(); //ToArray
12 голосов
/ 06 мая 2009

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

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;
});

В основном много путей.

7 голосов
/ 06 мая 2009

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

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

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

var array = $("#mydiv").getIdArray();
5 голосов
/ 15 декабря 2013

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

$('[id]')

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

$('span[id^="span"]')
3 голосов
/ 06 мая 2009

Не массив real , но все объекты являются javascript ассоциативными массивами.

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

$(function() {

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

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

   });
1 голос
/ 22 мая 2016

HTML

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

JQuery

var IDs = [];
$("#mydiv").find("span").each(function(){ IDs.push($(this).attr("id")); });
1 голос
/ 22 августа 2015

Вы можете получить идентификаторы специфических тегов и отправить их в другой элемент. Для примера:

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

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

0 голосов
/ 28 июля 2014
for(i=1;i<13;i++)     
{

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

}  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...