Получить некорректный HTML
Здравствуйте.
Понадобилась написать несложный парсер. И хотелось бы задавать тегу css класс, писать там все что вздумается, скриптом искать элементы с этим классом и придавать нужный вид тому что внутри тега. Текст внутри тега может содержать некорректный хтмл, поэтому с помощью innerHTML его получать нельзя, т.к. браузер сам закрывает теги и прочее. Чтобы браузер не парсил содержимое тега, появилась мысль заключить в коммент содержимое тега, но опять же, придется обращаться к innerHTML (comment = document.createComment(myelem.innerHTML)), потом появилась мысль добавить текстовые ноды в начале и конце содержимого тега "<!--" и "-->" соответственно, получить innerHTML, а потом отделить их. Но тогда браузер заменит угловые скобки на мнемоники и комментарий не получится. Подскажите есть ли возможность получить текст внутри тега без изменений? |
отвечу себе сам, нет, нельзя, потому что при загрузке страницы браузер уже все дорисовывает.
UPD Проверил на синтакс хайлайтере http://alexgorbatchev.com/SyntaxHighlighter/ строку var a = "<span style = \"color: red\">"; Как и ожидал, та же проблема |
Можно класть в textarea, но лучше всё-таки в JavaScript сразу.
|
Цитата:
|
Kolyaj,
С текстареа очень удобно кстати, получать textarea c нужным css классом или другим каким атрибутом, брать value, div с подсвеченным кодом, прятать или удалять textarea , ставить рядом div. Если напрямую в javascript помещать код требующий подсветки, то тоже возникает проблема, возьмем ту же строку var a = "<span style = \"color: red\">"; alert(a); Экранированные кавычки преобразуются в обычные, то есть я получу уже не исходный текст. Пока что это лучший вариант на мой взгляд, спасибо |
Цитата:
<? $str = "Произвольная строка для JS"; ?> <script type="text/javascript"> var str = <?= json_encode($str) ?>; </script> |
Нет, я все преобразования на клиенте делаю, просто получаю все
<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"; } }()) |
Цитата:
|
Правда ведь. Ну тогда и правда остается один вариант, напрямую брать текст
|
Цитата:
правда непонятно, зачем тебе некорректный html |
Часовой пояс GMT +3, время: 06:12. |