Javascript JQuery:用有效的HTML代码替换自定义HTML标记
我目前正在一个AJAX网站上工作,在那里我们使用自定义HTML标记来创建模板页面 这是HTML部分:Javascript JQuery:用有效的HTML代码替换自定义HTML标记,javascript,jquery,html,ajax,templates,Javascript,Jquery,Html,Ajax,Templates,我目前正在一个AJAX网站上工作,在那里我们使用自定义HTML标记来创建模板页面 这是HTML部分: <div id="main"> <div> <ns:zone name="navigation" /> </div> <div> <ns:zone name="page" /> </div> </div> 但是,您可能已经注意到HTML
<div id="main">
<div>
<ns:zone name="navigation" />
</div>
<div>
<ns:zone name="page" />
</div>
</div>
但是,您可能已经注意到HTML代码的外观可能会更好,如下所示:
<div id="main">
<ns:zone name="navigation" />
<ns:zone name="page" />
</div>
$('[*name]').each(function(){//do your stuff});
不幸的是,在这种情况下,第一个“区域”标记将被正确替换,但第二个“区域”标记将消失。
我不认为这是因为浏览器(我在Chrome和Firefox中测试过),而是因为JQuery。
这可能是因为JQuery“重建”DOM树,并删除了我的“无效”HTML标记吗
我还尝试使用JQuery的html()方法,而不是replaceWith()。结果是一样的
你看到问题出在哪里了吗?看起来JQuery确实支持自定义HTML,但可能不正确?我应该设置自己的xmlns吗
附带说明:网站应该允许客户非常轻松地创建自定义模板,或者将购买的网站转换为我们应用程序的模板。
我们目前正在用PHP开发web服务,但我们可能会将应用程序的一部分移动到glassfish服务器。因此,这种机制不应该依赖于服务器技术!
很明显,网站应该尽可能的跨浏览器
--
非常感谢您的建议。我认为您应该使用select函数中的“*”属性来选择所有元素,然后对它们应用$。each函数!阅读 大概是这样的:
<div id="main">
<ns:zone name="navigation" />
<ns:zone name="page" />
</div>
$('[*name]').each(function(){//do your stuff});
在这种情况下,代码可能是错误的,但想法是一样的!
或者对它们使用$.find()函数,然后使用$.each函数
您的代码只选择第一个元素,而不是全部
希望有帮助 如果你做了正确的收尾,它可能会起作用:
<ns:zone name="navigation"></ns:zone>
<ns:zone name="page"></ns:zone>
我能听到你所有的客户都在向你尖叫:“我的谷歌排名到哪里去了?”哈哈,说得好!我有一个想法,这可能是解决这个问题的办法。仍然需要测试。有传言说谷歌实际上评估了AJAX调用。。。但在投入生产之前,你会想进行广泛的测试。不过,一般来说,您最好在服务器端解析模板。如果你想用JS/jQuery来达到这个目的,考虑设置一个专用的No.js脚本——DOM模块是可用的,而且是难以置信的快。标签不是HTML的一部分不是HTML,而是认为他们会给出奇怪的结果。当然,使其尽可能可定制的方法是操作用户插入的有效标记!奇怪的是,我认为类似于的速记标记是“通用的”,可以应用于任何标记。。。出于好奇:有没有一种方法可以让快捷标记结束和自定义标记一起工作?我不想告诉客户“是的,它是有效的,但你应该这样做,而不是那样做”…:-)谢谢您的回答。不,它不是,自动关闭标记是XML而不是HTML,它取决于您的文档MIME类型,但通常在XHTML中是的缩写,但这只适用于XML解析模式,并且大多数文档都作为文本/HTML使用。在HTML5中,仅表示。斜杠对于那些对XML上瘾的人来说只是语法上的甜点。语法有效,但不是“自动关闭标记”。这种区别很重要,因为(至少在HTML语法中)在HTML5中表示,而不像在XHTML中那样表示。jQuery可能会做浏览器所做的事情?很有趣,但这也会选择标记之类的,不是吗?我想我可以过滤掉结果,但我关心的是性能。不过我会测试一下,谢谢你的回答!您可以在前面添加“ns”属性,如“ns[*name]”,它将只选择带有“ns”和属性名称的标记,因此,并非所有输入都被选中