2013-05-31 5 views
0

Я управляю дерево (все плавающие фреймы вложенными на странице) с помощью id и src, поэтому для данного src я могу вернуть массив элементов, ведущих к этому плавающем фрейме, например, так:Могу ли я создать селектор Javascript из массива элементов?

["document", "123123", "dasd321"] 

С количество элементов в моем массиве динамическое, теперь я хотел бы построить селектор, чтобы получить окно для отправки postMessage. Поэтому мне понадобится примерно следующее:

document 
    .getElementById("123123").contentWindow 
    .getElementById("dasd321").contentWindow 
    ... 
    ... postMessage({"foo":"bar"}, window.location.href); 

будет построено динамически.

Вопрос:
ли это вообще возможно для генерации динамического выбора с помощью цикла по массиву? Если это так или нет, как бы я это сделал?

Спасибо!

ответ

1
target = ["document", "123123", "dasd321"].reduce (function (tgt, o) { 
    return tgt && tgt.getElementById (o); 
}, document); 

должен сделать трюк. возвращает null, если какой-либо из ваших компонентов не существует

+0

Мне тоже нравится! Благодаря! – frequent

+0

Спасибо. это сработало лучше всего. – frequent

1

Это можно легко сделать с:

["document", "123123", "dasd321"].forEach(function(o){ 
    document.getElementById(o).contentWindow //and so on 
}); 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FArray%2FforEach

+0

безупречный. Благодаря! – frequent

+0

Добро пожаловать:] –

+0

не будет работать в старых браузерах –

1

Вы можете использовать querySelectorAll:

var elements = ['#document', '#123123', '#dasd321']; 
elements = document.querySelectorAll(elements.join(',')); 

[].forEach.call(elements, function(element) { 
    // do something with `element` 
}); 
Смежные вопросы