21.04.2011, 02:13
|
|
prodigy
|
|
Регистрация: 01.11.2010
Сообщений: 503
|
|
Получить некорректный HTML
Здравствуйте.
Понадобилась написать несложный парсер. И хотелось бы задавать тегу css класс, писать там все что вздумается, скриптом искать элементы с этим классом и придавать нужный вид тому что внутри тега.
Текст внутри тега может содержать некорректный хтмл, поэтому с помощью innerHTML его получать нельзя, т.к. браузер сам закрывает теги и прочее.
Чтобы браузер не парсил содержимое тега, появилась мысль заключить в коммент содержимое тега, но опять же, придется обращаться к innerHTML (comment = document.createComment(myelem.innerHTML)),
потом появилась мысль добавить текстовые ноды в начале и конце содержимого тега "<!--" и "-->" соответственно, получить innerHTML, а потом отделить их. Но тогда браузер заменит угловые скобки на мнемоники и комментарий не получится.
Подскажите есть ли возможность получить текст внутри тега без изменений?
__________________
readOnly
|
|
21.04.2011, 04:48
|
|
prodigy
|
|
Регистрация: 01.11.2010
Сообщений: 503
|
|
отвечу себе сам, нет, нельзя, потому что при загрузке страницы браузер уже все дорисовывает.
UPD
Проверил на синтакс хайлайтере http://alexgorbatchev.com/SyntaxHighlighter/
строку var a = "<span style = \"color: red\">";
Как и ожидал, та же проблема
__________________
readOnly
Последний раз редактировалось poorking, 21.04.2011 в 05:49.
|
|
21.04.2011, 10:05
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Можно класть в textarea, но лучше всё-таки в JavaScript сразу.
|
|
21.04.2011, 10:35
|
Особый гость
|
|
Регистрация: 02.04.2010
Сообщений: 4,260
|
|
Сообщение от poorking
|
И хотелось бы задавать тегу css класс, писать там все что вздумается, скриптом искать элементы с этим классом и придавать нужный вид тому что внутри тега.
|
использование пространств имен еще никто не отменял
|
|
21.04.2011, 11:08
|
|
prodigy
|
|
Регистрация: 01.11.2010
Сообщений: 503
|
|
Kolyaj,
С текстареа очень удобно кстати, получать textarea c нужным css классом или другим каким атрибутом, брать value, div с подсвеченным кодом, прятать или удалять textarea , ставить рядом div.
Если напрямую в javascript помещать код требующий подсветки, то тоже возникает проблема, возьмем ту же строку
var a = "<span style = \"color: red\">";
alert(a);
Экранированные кавычки преобразуются в обычные, то есть я получу уже не исходный текст.
Пока что это лучший вариант на мой взгляд, спасибо
__________________
readOnly
|
|
21.04.2011, 11:33
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Сообщение от poorking
|
то тоже возникает проблема
|
Нет никакой проблемы, если строку прогонять через json_encode (если у вас php).
<? $str = "Произвольная строка для JS"; ?>
<script type="text/javascript">
var str = <?= json_encode($str) ?>;
</script>
|
|
21.04.2011, 12:30
|
|
prodigy
|
|
Регистрация: 01.11.2010
Сообщений: 503
|
|
Нет, я все преобразования на клиенте делаю, просто получаю все
<textarea class = "marked"></textarea>
и их заменяю на другие созданные элементы.
А почему так хуже? Мне кажется это удобно, просто требующий изменения текст помещать в textarea с нужным классом
<textarea class = "marked">
<span>
var a = "<span style = \"color: red\">";
</textarea>
Примерно так делаю
(function(){
var textareas = document.getElementsByTagName("TEXTAREA"), i = textareas.length;
var markedSnippets = [], snippet, text;
while(i --){
snippet = textareas[i];
if(/\b(marked)\b/.test(snippet.className)){
markedSnippets.push(snippet);
}
}
i = markedSnippets.length;
while(i --){
//HTMLEntities API [url]http://javascript.ru/blog/I-zone/Razbiraem-ponyatie-mnemoniki-praktike[/url].
text = HTML.encode(HTML.decode(markedSnippets[i].value));
/*
Тут делаю нужные замены в text
*/
markedSnippets[i].parentNode.insertBefore(
newDOM("DIV",
{
properties:{
innerHTML: text,
style:{
whiteSpace: "pre"
}
}
}
),
markedSnippets[i]);
markedSnippets[i].style.display = "none";
}
}())
__________________
readOnly
|
|
21.04.2011, 13:53
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Сообщение от poorking
|
А почему так хуже?
|
Ну например в строке может встретиться </textarea>
|
|
21.04.2011, 14:26
|
|
prodigy
|
|
Регистрация: 01.11.2010
Сообщений: 503
|
|
Правда ведь. Ну тогда и правда остается один вариант, напрямую брать текст
__________________
readOnly
|
|
28.04.2011, 07:23
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
Сообщение от poorking
|
А почему так хуже? Мне кажется это удобно, просто требующий изменения текст помещать в textarea с нужным классом
|
все зависит от того, что ты делаешь. Если очередной шаблонизатор пишешь, то проблем тэгма с закрывающиом наверняка как-то решается, потому что есть куча шаблонизаторов построенных по этому принципы. Но проблема в том, что если ты разметку на самой странице указываешь, то сильнее привязываешь компонент к странице, чем если бы она была в виде строки в js-файле
правда непонятно, зачем тебе некорректный html
|
|
|
|