![]() |
Модераторы: Sardar, Aliance |
![]() ![]() ![]() |
|
SDEVIL |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 30.10.2006 Репутация: нет Всего: 1 |
Необходимо следующее:
Есть html документ сформированный php скриптом, в документе есть элементы с id sub_*, где *-любое число любых символов, имена всех необходимых элементов начинаются с sub_ как можно найти эти элементы и записать их в массив(полное id элементов для последующей работы с ними) --------------------
Подпись сбежала к другому юзверю.... |
|||
|
||||
Mymik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1474 Регистрация: 12.5.2006 Где: Lamer-центер Репутация: 11 Всего: 78 |
если ты хотя бы знаешь тэги этих элементов то можно с помощью document.getElementsByTagName() и потом перебирать все эти элементы. В цикле брать element.id.indexOf("sub_") == 0 тогда записывать. А если нет, то пропускать.
Но если ты не знаешь даже тэгов в которых эти элементы будут встречаться... что ж... тогда вообще полностью перебор всех элементов и брать их child'ы... Единственный вариант это рекурсия. Но если html очень сложный... хм... тогда я б посоветовал тебе на стороне сервера еще формировать этот массив и не насиловать пользовательский комп такой ресурсозатратной дискурсией. -------------------- |
|||
|
||||
AKS |
|
||||
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 27 Всего: 52 |
Наверняка мог бы подойти вариант, наподобие такого:
В массиве ids будут id, начанающиеся с sub_. |
||||
|
|||||
SDEVIL |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 30.10.2006 Репутация: нет Всего: 1 |
А этот скрипт не очень будет грузить комп пользователя? --------------------
Подпись сбежала к другому юзверю.... |
|||
|
||||
dXdYdZ |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 146 Регистрация: 16.4.2007 Репутация: 3 Всего: 4 |
Быстрее будет всё же рекурсией:
//Массив с будущими элементами: 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 |
|
||||
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 27 Всего: 52 |
SDEVIL, по-поводу:
можно сказать, что это будет зависеть от размера страницы. Я взял для теста страничку, в которой document.body.innerHTML.length ~ 300000 символов. Так вот "пробежка" 5 раз (т.е. 5 вызовов функции и замер времени перед первой и после последней) заняла самое меньшее у Opera/FF ~ 0.5 сек, а у IE примерно 1 секунду. Т.е. триста тысяч символов умноженные на пять были просмотрены примерно за 0.5 - 1 секунду. Зависеть это, конечно же, должно еще и от компьютера пользователя, ну и еще от чего-нибудь - я уж не знаю... Неплохо было бы сравнить. Да уж, без них не обошлось ![]()
С подобными же ошибками? ![]() |
||||
|
|||||
Zeroglif |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
Как вариант, если не беспокоят погрешности, то можно собрать "все" элементы через:
для IE ниже 6-ого - all. Могут быть, конечно, кроссбраузерные несостыковки, но решаемо. |
|||
|
||||
dXdYdZ |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 146 Регистрация: 16.4.2007 Репутация: 3 Всего: 4 |
Вот исправленный скрипт. Протестирован в IE 6.0.2900, Mozilla 1.7.12,
Opera 9.01, FireFox 2.0:
На счёт ошибок - когда пишу для себя, то многократно тестирую в Mozilla FireFox, Microsoft IE, Opera и Mozilla. А цель предыдущего ответа - не дать 100% рабочий код, а показать сам путь решения проблемы. Для меня задача состоит в том, чтобы человек понял принцип действия и мог потом написать любой похожий скрипт, а не в том, чтобы он его тупо скопировал, вставил и забыл. В данном случае ошибки даже полезны. Поєтому в предідущем варианте их даже не проверял. Думал, что и так понятно. |
|||
|
||||
AKS |
|
|||
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 27 Всего: 52 |
||||
|
||||
![]() ![]() ![]() |
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |