Добавить динамически посторонний объект в svg с помощью javascript
Когда я запускаю этот код, он показывает мне пустой экран, но когда я обновляю код с помощью инструмента разработчика в chrome, тогда он показывает данные. Пожалуйста, помогите с некоторым объяснением, почему оно показывает, когда я обновляю код, используя инструмент разработчика хром,
Это связано с тем, что DOM в браузере снова запускается, если да, то почему не в первый раз, когда он показывает. Это происходит из-за foreignObject.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<svg id="t">
<g>
<text x="10" y="10">hello</text>
</g>
</svg>
<script>
var s = document.getElementById('t');
var g = s.childNodes[1];
console.log(g.childNodes[1].remove());
var foreign = document.createElementNS('http://www.w3.org/2000/svg',"foreignObject");
foreign.setAttribute('width', 500);
foreign.setAttribute('height', 150);
var txt = document.createElementNS('http://www.w3.org/2000/svg', 'text');
txt.setAttribute('x', '10');
txt.setAttribute('y', '10');
var t = document.createTextNode("This is a paragraph.");
txt.appendChild(t);
foreign.appendChild(txt);
g.appendChild(foreign);
</script>
</body>
</html>
Ответы
Ответ 1
Текст svg node не может быть дочерним объектом foreignObject node, вам нужен svg node. Например.
var s = document.getElementById('t');
var g = s.childNodes[1];
console.log(g.childNodes[1].remove());
var foreign = document.createElementNS('http://www.w3.org/2000/svg',"foreignObject");
foreign.setAttribute('width', 500);
foreign.setAttribute('height', 150);
var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
var txt = document.createElementNS('http://www.w3.org/2000/svg', 'text');
txt.setAttribute('x', '10');
txt.setAttribute('y', '30');
var t = document.createTextNode("This is a paragraph.");
txt.appendChild(t);
foreign.appendChild(svg);
svg.appendChild(txt);
g.appendChild(foreign);
<html lang="en">
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<svg id="t">
<g>
<text x="10" y="30">hello</text>
</g>
</svg>
</body>
</html>
Ответ 2
@JabranSaeed if you want to use foroeignObject,beter to follow this method
<html lang="en">
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<svg id="t">
<g>
</g>
</svg>
<script>
var s = document.getElementById('t');
var g = s.childNodes[1];
var foreign = document.createElementNS
('http://www.w3.org/2000/svg',"foreignObject");
foreign.setAttribute('width', 500);
foreign.setAttribute('height',500);
var iDivele = document.createElement('div');
var ob = document.createTextNode("xxxx");
iDiv.appendChild(ov);
foreign.appendChild(iDivele);
g.appendChild(foreign);
</script>
</body>
</html>
Ответ 3
@JabranSaeed if you want to use foroeignObject to insert non svg element then:
<html lang="en">
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<svg id="t">
<g>
</g>
</svg>
<script>
var s = document.getElementById('t');
var g = s.childNodes[1];
var foreign = document.createElementNS
('http://www.w3.org/2000/svg',"foreignObject");
foreign.setAttribute('width', 500);
foreign.setAttribute('height',500);
var iDiv = document.createElement('div');
var t = document.createTextNode("This is a paragraph.");
iDiv.appendChild(t);
foreign.appendChild(iDiv);
g.appendChild(foreign);
</script>
</body>
</html>
Ответ 4
На самом деле ваша дочерняя дочерняя часть создает пробную версию.
вы не добавили его в правильном порядке.
Проверьте приведенный ниже код и попробуйте
var s = document.getElementById('t');
var g = s.childNodes[1];
g.childNodes[1].remove();
var foreign = document.createElementNS('http://www.w3.org/2000/svg',"foreignObject");
foreign.setAttribute('width', 500);
foreign.setAttribute('height', 150);
var t = document.createTextNode("This is a paragraph.");
foreign.appendChild(t);
g.appendChild(foreign);
сообщите мне, если он работает