Почему не работает модификация DOM в XHTML?

Файл .xhtml открываю в Хроме. В дом должен добавиться тег, но ничего не происходит. Ошибок в консоли нет. Стоит поменять расширение на .html, как программа начинает работать.

<?xml version="1.0" encoding="utf-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru">
<head>
<title>Title</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
</head>
<body>
  <div id="parent"></div>
</body>
<script>
  $(document).ready(function() {
    var added = $('<i/>');
    added.text("added tag");
    $( "#parent" ).append(added);
  });
</script>
</html>


Живой неработающий пример: https://dl.dropboxusercontent.com/u/1883230/rg/dom...
  • Вопрос задан
  • 2384 просмотра
Пригласить эксперта
Ответы на вопрос 2
Petroveg
@Petroveg
Миром правят маленькие с#@&ки
При создании элементов (и атрибутов) в пространствах имён (это то, что указано в атрибуте xmlns) требуется вызов createElementNS с указанием этого самого пространства

var test = document.createElementNS('http://www.w3.org/1999/xhtml', 'i');


Технически, можно и не указывать пространство, но тогда все элементы будут относиться к тому пространству, в котором расположен глобальный контекст (это если вы решите динамически inline SVG модифицировать).

Напишите маленькую функцию (или прототип jQuery расширьте). Можете сделать её и немаленькой — с парсингом строки для выделения имени тэга и атрибутов.

$.extend($, {
	createNS: function (tag, ns) {
		return $(document.createElementNS(ns, tag));
	}
});

$(function () {
	$.createNS('i', 'http://www.w3.org/1999/xhtml')
		.text('added tag')
		.appendTo($('#parent'));
});


Update: причину глюка верно указал @SelenIT2 — заключите в CDATA свой скрипт. И вообще следуйте требованиям синтаксиса и структуры XML.

Тем не менее, вопрос о пространстве имён имеет значение при генерации элементов и атрибутов из пространства, отличающего от того, в котором находится глобальный контент (SVG, RDFa и т.п.).
Ответ написан
Комментировать
KOLANICH
@KOLANICH
Знаю JS, PHP, C++, C#
используйте
document.body.addEventListener("DOMContentLoaded",()=>{
   let el=document.createElement("I");
   el.innerHTML="addedTag";
   document.getElementById("parent").appendChild(el);
},false);


и script внутри body

и
<!DOCTYPE html>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы