Как получить все идентификаторы с помощью 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 ответов:
//но я не могу получить идентификатор и назначить его массиву, который не находится в области видимости?(или я могу)
Да, вы можете!
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.