Я следующий код JS (разделась до минимального размера, где до сих пор существует проблема)JQuery проблемы с HTML() обработками в Opera
<html>
<head>
<script type="text/javascript" src="jquery.js"></script>
</head>
<body>
<div id="debug">this is <em>test</em></div>
<script type="text/javascript">
var string1 = $('#debug').html();
var string2 = string1.replace(/<em>/g, '<strong>');
string2 = string2.replace(/<\/em>/g, '</strong>');
$('#debug').html(string2);
</script>
</body>
</html>
В Firefox все работает и < эм > метки заменяются < сильного >.
Но в Опере <em> находятся на месте. Кроме того, любые другие теги HTML не захватываются регулярными выражениями вообще.
Есть ли способ исправить это поведение? Мне нужно не только заменять теги, но и анализировать их содержимое (например, атрибуты href).
@ technix.in.ua Opera просто создание нормированного представление исходного HTML и выбирает, чтобы имена тегов в верхний регистр. Firefox делает обратное и делает все теги именами строчными. –
В дополнение к Firefox, Safari & Chrome также нормализуется в нижнем регистре. Opera следила за возвращаемым значением TagSoup [tm] .innerHTML IE, чтобы быть «совместимым», но Opera в последние годы старалась дистанцироваться от копирования ошибок IE. Вообще говоря, это имеет смысл (IMHO), учитывая, что теги XHTML и атрибуты в любом случае должны быть строчными. В этом случае нормализация IE/Opera является ударом. Теги верхние, атрибуты ниже (или camelCase) и только правильно цитируются по атрибутам со значениями, установленными ... но я отбрасываю ... – scunliffe
Я не совсем понимаю утверждение, что имена тегов и атрибутов «должны быть» в нижнем регистре. Логика для того, что делает IE, очень проста: IE изобрел innerHTML, поэтому они по определению правильные, и браузеры, которые хотят его поддерживать, должны выяснить, что делает IE. (Конечно, теперь он стандартизован в HTML5, поэтому, когда HTML5 выпущен, это больше не применяется.) – hallvors