我最近去了myspace网站查看他们的HTML代码是怎么做的,在他们的HTML代码中有这条内联jQuery:
<script type="text/html" id="AutoCompleteResultsTemplate">
<![CDATA[
<* var q = MySpace.Search.Utils.TranslateSpecialChars(this.query); *>
<span class="suggestions">
<*=this.suggestionResource *>
</span>
<ul>
<* jQuery.each(this.results, function(i,v) {
jQuery.each(v, function(j, d) {
*>
<li data-query="<*=d.displayText *>" data-url="<*= d.url *>">
<span class="type"><*=d.type *></span>
<*=MySpace.Search.Utils.HighlightCharacters(d.displayText, q) *>
</li>
<* });
}); *>
<li class="last" data-query="<*=this.query *>" data-url="<*= this.allResultUrl *>">
<span class="type"><*=this.allResultText *></span>
<*=this.searchResource *> '<*= this.query *>'
</li>
</ul>
<iframe></iframe>
]]>
</script>
我以前从未使用过CDATA,但我知道它用于XHTML(当你有内联javascript时,它仍然有效),而myspace当前正在使用HTML 5.他们使用CDATA有什么特别的原因吗?提前谢谢。
答案 0 :(得分:-1)
粘贴的代码无效 - 没有关闭脚本标记 (OP编辑)。 脚本元素没有id属性 (在HTML5中添加)和“text / html”的类型对于脚本元素无效 (在HTML5中允许),内容无效HTML或脚本。
这是垃圾。
可能它依赖于忽略内容的浏览器,因为无效类型属性,然后依赖于id属性的非标准支持,最后可能得到textContent / innerHTML并对文本做了一些事情。
我称之为垃圾和神秘咒语的网络开发的一个例子。
类似的方法是包含具有伪造src属性值和内容的脚本元素。由于src属性,内容将被忽略,但可以使用textContent / innerHTML检索和使用。至少该方法可以与有效标记一起使用(但仍不推荐)。
CDATA部分应该只应与MathML或SVG(http://www.w3.org/TR/html5/syntax.html#cdata-sections)一起使用。