Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JQuery:用有效的HTML代码替换自定义HTML标记_Javascript_Jquery_Html_Ajax_Templates - Fatal编程技术网

Javascript JQuery:用有效的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

我目前正在一个AJAX网站上工作,在那里我们使用自定义HTML标记来创建模板页面

这是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”和属性名称的标记,因此,并非所有输入都被选中