0

我正在使用客户端技术(大部分通过 JQuery 的 JavaScript)开发本机移动应用程序 CMS 系统,并实现了类似于 ASP.NET 的模板系统。

所以假设我有一个导航控件,它有一个 starttemplate、endtemplate 和 itemtemplate,如下所示:

<div data-type="navigation" id="navigationControlDemo">
    <div data-type="starttemplate">
      <ul id="Menu">
    </div>
    <div data-type="itemtemplate">
      <li><a href="[[Link]]">[[Text]]</a></li>
    </div>  
    <div data-type="endtemplate" >
        </ul>
    </div>
 </div>

我的问题是浏览器,因为它似乎决定要修复 html,以便标签“正确”关闭,如下所示:

 <div data-type="navigation" id="navigationControlDemo">
    <div data-type="starttemplate">
      <ul id="Menu">
      </ul>
    </div>
    <div data-type="itemtemplate">
      <li><a href="[[Link]]">[[Text]]</a></li>
    </div>  
    <div data-type="endtemplate" >

    </div>
    </div>

我尝试了一些解决方法和快速破解无济于事。我尝试用某些字符替换“<”>“,然后在加载后替换它们,但问题仍然存在。

4

4 回答 4

4

您的代码不是有效的 html。你不能交错标签(在一个地方打开它并在一个完全不同的地方关闭它)。标签必须正确嵌套。

有效的:

<p>
    <ul>
    </ul>
</p>

无效的:

<p>
    <ul>
</p>
    </ul>

请注意,如果它看起来“关闭”,您将无法正确缩进第二个。请先确保您的 html 正确,然后浏览器才会正常运行。

-update- 因为您想要客户端模板,所以您不想要将(无效)html 解析为 html。但是,它显然也不是有效的 xml,这可能是您想要的。

您可以做的是将部分的内容包装为CDATA.

<div data-type="navigation" id="navigationControlDemo">
    <div data-type="starttemplate"><![CDATA[
      <ul id="Menu">
    ]]></div>
    <div data-type="itemtemplate"><![CDATA[
      <li><a href="[[Link]]">[[Text]]</a></li>
    ]]></div>  
    <div data-type="endtemplate" ><![CDATA[
        </ul>
    ]]></div>
 </div>

现在,如果您将其解释为 xml,则模板中的部分将被视为文本而不是标记。

于 2012-12-04T09:04:27.820 回答
0

您不能将<div>元素作为元素的子<ul>元素。
<ul>s 只接受<li>子标签。规格

此外,您似乎在此处错误地嵌套了标签:

<div data-type="starttemplate">
    <ul id="Menu">
</div>

<div>如果<ul>仍然打开,您将无法关闭它。这<ul>就是过早关闭的原因。

于 2012-12-04T09:05:47.013 回答
0

基本上,您要求一种方法来强制浏览器显示格式错误、混乱的 tag-soup。感谢上帝,大多数浏览器不会盲目地渲染这种代码,因为结果会令人难以忍受,并且会使您的页面完全无法理解。
也就是说,如果您查看原始页面源代码,您可能会看到未更正的原始标记。但由于浏览器无法真正呈现它,引擎会全力以赴并尽力而为。

但是请不要浪费您的时间寻找解决此问题的方法,它只是一个帮助您的功能,而不是惹恼您。另外:HTML5 有更多关于允许和不允许的规则,以及浏览器如何处理无效标记(<div><ul></div>例如,在您的代码中:被视为无效)。如果您愿意,可以查看W3C 规范以获取有关该主题的更多信息。

于 2012-12-04T09:09:17.633 回答
0

我没有使用诸如关键字之类的标签来表示 < 和 >,然后使用模板系统呈现所有正确的 html,并将这些关键字替换回 , 和 >,然后将其添加到文档中。我的模板标签中的语法很烦人,但它按我需要的方式工作。

于 2012-12-04T09:49:25.407 回答