Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > JavaScript: Общие вопросы > Найти все элементы документа по id |
Автор: SDEVIL 30.7.2007, 19:24 |
Необходимо следующее: Есть html документ сформированный php скриптом, в документе есть элементы с id sub_*, где *-любое число любых символов, имена всех необходимых элементов начинаются с sub_ как можно найти эти элементы и записать их в массив(полное id элементов для последующей работы с ними) |
Автор: Mymik 30.7.2007, 20:14 |
если ты хотя бы знаешь тэги этих элементов то можно с помощью document.getElementsByTagName() и потом перебирать все эти элементы. В цикле брать element.id.indexOf("sub_") == 0 тогда записывать. А если нет, то пропускать. Но если ты не знаешь даже тэгов в которых эти элементы будут встречаться... что ж... тогда вообще полностью перебор всех элементов и брать их child'ы... Единственный вариант это рекурсия. Но если html очень сложный... хм... тогда я б посоветовал тебе на стороне сервера еще формировать этот массив и не насиловать пользовательский комп такой ресурсозатратной дискурсией. |
Автор: SDEVIL 31.7.2007, 22:21 | ||
А этот скрипт не очень будет грузить комп пользователя? |
Автор: dXdYdZ 1.8.2007, 01:05 |
Быстрее будет всё же рекурсией: //Массив с будущими элементами: var ia=[]; parse=function(Fragment) { if(!Fragment.childNodes) return; for(var n=Fragment.childNodes.length-1;n>-1;n--) { var id=Fragment[n].getAttribute("id"); if(id) if(id.indexOf("sub_")==0) ia.push(Fragment[n]); parse(Fragment[n]); } } parse(document.body); Я не тестировал этот скрипт, так что возможны ошибки. Но в целом это будет работать довольно быстро(писал подобные вещи не один раз). |
Автор: AKS 1.8.2007, 07:29 | ||||
SDEVIL, по-поводу:
можно сказать, что это будет зависеть от размера страницы. Я взял для теста страничку, в которой document.body.innerHTML.length ~ 300000 символов. Так вот "пробежка" 5 раз (т.е. 5 вызовов функции и замер времени перед первой и после последней) заняла самое меньшее у Opera/FF ~ 0.5 сек, а у IE примерно 1 секунду. Т.е. триста тысяч символов умноженные на пять были просмотрены примерно за 0.5 - 1 секунду. Зависеть это, конечно же, должно еще и от компьютера пользователя, ну и еще от чего-нибудь - я уж не знаю... Неплохо было бы сравнить. Да уж, без них не обошлось ![]()
С подобными же ошибками? ![]() |
Автор: Zeroglif 1.8.2007, 12:32 | ||
Как вариант, если не беспокоят погрешности, то можно собрать "все" элементы через:
для IE ниже 6-ого - all. Могут быть, конечно, кроссбраузерные несостыковки, но решаемо. |
Автор: dXdYdZ 1.8.2007, 17:54 | ||
Вот исправленный скрипт. Протестирован в IE 6.0.2900, Mozilla 1.7.12, Opera 9.01, FireFox 2.0:
На счёт ошибок - когда пишу для себя, то многократно тестирую в Mozilla FireFox, Microsoft IE, Opera и Mozilla. А цель предыдущего ответа - не дать 100% рабочий код, а показать сам путь решения проблемы. Для меня задача состоит в том, чтобы человек понял принцип действия и мог потом написать любой похожий скрипт, а не в том, чтобы он его тупо скопировал, вставил и забыл. В данном случае ошибки даже полезны. Поєтому в предідущем варианте их даже не проверял. Думал, что и так понятно. |
Автор: AKS 1.8.2007, 22:08 |
Так вот Вы какой... ![]() |