Получить некорректный 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, время: 09:07. |