Подтвердить что ты не робот

Как получить все ID с помощью 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 для этого,

4b9b3361

Ответ 1

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

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

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

Это красота closures.

Обратите внимание, что пока вы были на правильном пути, 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)

Ответ 2

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

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

Ответ 3

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

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

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

Ответ 4

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

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

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

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

Ответ 5

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

$('[id]')

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

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

Ответ 6

Не настоящий массив, но objs - все ассоциативные массивы в 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);

   });

Ответ 7

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

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

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

Ответ 8

HTML

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

JQuery

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

Ответ 9

for(i=1;i<13;i++)     
{

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

}