Как получить все 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 для этого,
Ответы
Ответ 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());
}