2016-01-16 31 views
0

在浏览器环境中,创造了一个SVG元素这样
svg = document.createElement('svg');
追加到身体与SVG元素不起作用填充,因为
svg.namespaceURI === 'http://www.w3.org/1999/xhtml'
但这样做这样
svg = document.createElementNS('http://www.w3.org/2000/svg','svg')
它会工作。
这是合理的为元素应该在SVG方式来处理,而不是在HTML方式
同样,在创建
select = document.createElementNS('xxxx','select')
并追加到身体,元素就不会显示为一个众所周知的select下拉,因为浏览器被告知它不是http://www.w3.org/1999/xhtml:select元素,而是它是xxxx:select
根据节点本身的NS(何时识别出),它会像节点处理一样被分派到不同的处理器。
是否有可能为Document定义一个自定义namespaceURI,以便让它的具有该特定nsURI的节点以自定义的方式进行处理,可能是通过函数来​​处理的?浏览器自定义命名空间要素处理器

+0

是的,应该是可能的一种方法。预期的结果是什么? – guest271314

+0

如何?我不打算采取特定的结果,我正在评估拦截文档处理的不同方式,并且这种情况看起来很有趣 – aleclofabbro

+0

一种方法https://developer.mozilla.org/en-US/docs/Web/API/Document/registerElement,http://stackoverflow.com/questions/34055503/what-is-the-point-of-the-is-syntax-when-extending-elements-in-web-components?s=4|0.0000;另见http://www.w3.org/TR/html4/sgml/dtd.html。可以定义_“让浏览器以某种方式对它们进行调度处理”_? “处理”包括什么? – guest271314

回答

1

注意,不确定预期结果是什么?答试图证明了用ProcessingInstruction

// create `ProcessingInstruction` 
 
var p = document.createProcessingInstruction("js", "{\"color\":\"blue\"}"); 
 
var div = document.getElementById("process"); 
 
document.body.insertBefore(p, div); 
 
// use `ProcessingInstruction` 
 
div.style.color = JSON.parse(div.previousSibling.nodeValue).color;
<!doctype html> 
 
<html> 
 
<body> 
 
    <div id="process">Process</div> 
 
</body> 
 
</html>

+0

我喜欢使用PI的想法,尽管它不是关于名称空间的,我做了一些测试,好吧,以编程方式添加PI节点,就像你做的一样,但是HTML解析不处理PI并将它们转换为注释节点。不支持的HTML也在你提供的链接中声明[«它HTML我们没有处理指令。 »](http://www.xmlplease.com/xml/xmlname/pi).. pity .. – aleclofabbro

+0

可以为节点类型7或节点类型8分析'html'文档,这些节点的data属性可以进一步解析,而不用使用'js'创建处理指令。其他替代方案可能是使用'xhtml',并在文档中使用'stylesheet'或'javascript'外部指令资源或节点包含'xslt';也可以使用'shadowRoot'和'template'和'content'元素来呈现自定义指令,具体取决于应用程序的预期结果。 – guest271314