Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > JavaScript: Общие вопросы > Рег. выражение - поиск html тега |
Автор: gorden 23.1.2008, 13:03 | ||||||||||||
Привет! Помогите пожалуйста с рег. выражением. Я вытаскиваю содержимое DIVа с помощью innerHTML. В этом содержимом есть такой тег:
Различные браузеры могут его так-же интерпритировать как:
или
или
т.е. удалять кавычки или менять элементы местами или добавлять обратный слеш в конце тега, например:
Мне нужно с помощью регулярного выражения найти этот тег из полученного содержимого DIVa. значение value - может быть буквой или цифрой значение id - может быть может быть буквой или цифрой или _ У меня на ум приходит только следующее, но это не работает:
Буду очень благодарен за любой совет. Спасибо!!!!!! |
Автор: solenko 23.1.2008, 13:14 |
А может проще пробежаться по DOM дереву и найти этот элемент? |
Автор: Sardar 23.1.2008, 13:22 |
Что только народ не придумает... ![]() div.http://developer.mozilla.org/en/docs/DOM:element.getElementsByTagName("input")[0] - оно? |
Автор: ksnk 23.1.2008, 15:23 |
Sardar, В этом случае, скорее всего, даже getElementById подойдет ;-)... |
Автор: gorden 23.1.2008, 15:50 |
Спасибо, я прекрасно понимаю, что через getElementById это можно сделать. Но в моем случае необходимо сделать именно через рег. выражения, иначе я бы не спрашивал. |
Автор: Astraller 23.1.2008, 15:57 |
gorden, а может вы еще не поленитесь изложить почему? ![]() |
Автор: gorden 23.1.2008, 16:21 | ||
Ну вот смотрите:
Этот код, например, будет размещаться на разных сайтах. При этом, подключаемый "myscript.js", берет содержимое DIVa при помощи innerHTML и проверяет, не внесены ли какие-либо ненужные изменения в содержимое DIVa "container". В DIVе могут находится и теги и Текст и все что угодно. Подключаемый скрипт "myscript.js" проверяет это, и если нет ненужных изменений, то выполняет одно действие, а если есть - другое. Вот мне и нужно это все проверить. Как в этом случае через DOM работать я пока не представляю. У меня пока получается проверить текст, с учетом случайных пробелов и переводов строки, которые допустимы для текста, но теги с более чем одним атрибутом проверить пока не получается. |
Автор: ksnk 23.1.2008, 17:27 | ||
В тот момент, когда скрипт "берет содержимое DIVa при помощи innerHTML" этот самый div УЖЕ есть в DOM и его и его содержимое можно проверить самим DOM'ом.
Тут есть тонкость - браузеры могут навесить свои собственные атрибуты на тег без разрешения, так что проверять надо только самые "ходовые" ![]() |
Автор: gorden 24.1.2008, 17:49 | ||||||
Не работает у меня ни в одном браузере такая конструкция. Не выходит этот код на mydiv. Так тоже не работает:
Хорошо, если через DOM, хотя в этом случае не проверить содержимое текста, то как тогда правильно обратиться к mydiv, толко не через главный документ: document.getElementById('mydiv') а через 'container'? И все же если есть мысли по поводу рег. выражений, pls. подскажите. |
Автор: Sardar 24.1.2008, 18:07 | ||
Этого не может быть, если только скрипт не пытается исполниться до вёрстки <div id="container... innerHTML - строка, выборок как коллекция не поддерживает. getElementById метод документа, потому как id уникален во всём документе (если вёрстка валидна), следовательно реализовать его для контейнерных элементов не имеет смысла. Вот в этой точке вместо выдёргивания innerHTML поставь div.getElementsByTagName("input") - список всех input'ов внутри div'а. Да, div это твоя переменная, где раньше стоял div.innerHTML... Да, getElementsByTagName пишеться с s (множественное). Вроде бы больше нигде ошибиться нельзя... Регами не стоит, это как минимум глупо. Если всё же очень хочется, то не нужно вносить атрибуты в рег, просто захвати все:
P.S. при проблемах, отвечай с ссылкой на страницу, иначе долго гадать будем. |
Автор: gorden 24.1.2008, 19:31 | ||||
Никак не пойму. Все равно не работает. Перегрелся я что-ли? Ошибка: container.getElementById is not a function
|
Автор: Sardar 24.1.2008, 19:43 |
gorden, повторяю, id - уникальный идентификатор на странице. Уникальный - означает один единственный, второго быть не может, иначе будет ошибка (браузер проигнорирует их множество, выдаст произвольный). Вывод: getElementById не имеет смысла вкладывать вне документа, т.к. иерархии (дерева) быть не может. Решение: return document.getElementById("myid").value; В отличии от id, имя тега не уникально (естественно), т.е. можно взять все теги с определённым именем из некоторого контейнера. Для этого метод (любой контейнер или document).getElementsByTagName(name). Возвращает список всех найденных, выбираешь необходимый. |
Автор: gorden 24.1.2008, 20:39 |
Я понял теперь. Спасибо. Буду пробовать одновременно и через DOM (для тегов) и через RegEx (для текста внутри контейнера). THANKS!!!!!!!!!!!!!! |
Автор: gorden 28.1.2008, 15:59 | ||
Снова возвращаюсь к теме, т.к. возникла еще одно проблема. Вот имеем:
В данном случае в контейнере только один DIV. У этого DIVа есть атрибут style со значением. Во всех браузерах кроме IE переменная styleContent получает точное значение атрибута style, а IE почему присваивает ей null. Подскажите pls. в чем проблема Спасибо. |
Автор: Astraller 28.1.2008, 16:22 | ||||
Можно попробовать:
Или просто:
У меня, помнится работало и то и другое везде. ![]() |
Автор: gorden 28.1.2008, 16:29 | ||
Не получается. Возвращается обьект. А если так:
То IE возвращает undefined. |
Автор: Astraller 28.1.2008, 16:37 | ||
gorden, а если:
|
Автор: SelenIT 28.1.2008, 16:39 |
Ох уж этот IE с его http://xpoint.ru/know-how/JavaScript/Atributyi?8 атрибутов... По идее, везде должен работать tagDiv[0].style.cssText. |
Автор: gorden 28.1.2008, 16:55 |
Точно! Работает! Но только теперь везде кроме Оперы :( |