【问题标题】:javascript automatically closes tags in a stringjavascript 自动关闭字符串中的标签
【发布时间】:2014-01-02 03:44:14
【问题描述】:

这是一个很奇怪的问题

statements[bracket].assembly+='<expr operator="'+statements[bracket].firsthalf.mathoperator+'"><constant value="'+statements[bracket].firsthalf.constant+'" /><parameter name="'+statements[bracket].secondhalf.parameter+'"/></expr>'

statements[bracket].firsthalf.constant=2 和消息应该显示为 &lt;constant value="2" /&gt; ,但标签显示为 &lt;constant value="2"&gt;&lt;/constant&gt; ,知道为什么标签会自动关闭吗?!

【问题讨论】:

  • 更有可能是浏览器这样做,而不是 JavaScript 本身。这可能只是浏览器清理 DOM 以匹配某些标准。
  • Javascript 不会改变这样的字符串。把绳子放在一起后,你在做什么?您在警报中显示的是什么?
  • @Guffa 这是我的典型代码 fiddle.jshell.net/prollygeek/AMnLS,我在第一次迭代中运行测试,其中括号等于 0
  • Uncaught ReferenceError: statements is not defined Uncaught ReferenceError: bracket is not defined Cannot read property 'operator' of undefined 你能更新你的小提琴或提供足够的代码以便重现问题吗?

标签: javascript


【解决方案1】:

您必须通过某个将字符串视为 HTML 的地方传递表达式(例如,innerHTML)。问题不在于您显示的字符串操作代码,而在于其他地方。

从您评估此表达式到您提醒该语句之间会发生什么?

【讨论】:

  • fiddle.jshell.net/prollygeek/AMnLS,这是一个典型的ryan代码,请检查一下,我没有清楚地得到你的答案。
  • 就算被当成html,为什么要自动关闭标签?
  • @ProllyGeek:因为自闭合标签严格来说不是有效的 HTML,但浏览器普遍接受它兼容 XML 和 XHTML,因此浏览器试图以它认为合理的方式修复您的 HTML以确保 DOM 可用。 JavaScript字符串只是普通字符串,它不会以任何特殊方式处理字符串中的标签,这就是为什么你的问题一定出在其他地方。
  • stackoverflow.com/questions/12948853/… ,这里发布了类似的问题
  • @ProllyGeek:这并没有带来什么新鲜事。正如我已经说过的,浏览器会在将无效的 HTML 插入文档之前对其进行修复。许多 jquery 函数(例如 .append() )将其处理的项目视为 HTML,并且必须包含格式良好的 HTML 片段。如果您希望我们帮助您准确找出代码中的问题所在,那么到目前为止您提供给我们的代码与您的问题无关。如果您希望我们能够帮助您找到代码中的问题,请生成 short, self contained, correct example 来证明您的问题。
【解决方案2】:

代码不会产生您显示的输出。要么你实际上在使用其他代码,要么在显示之前对字符串做一些事情(比如将其解析为 XML)。

我为代码提供了这些数据:

var bracket = 0;
var statements = [
    { assembly: '', operator: 'greater',
     firsthalf: { mathoperator: '*', constant: '2', parameter: '' },
     secondhalf: { mathoperator: '', constant: '2', parameter: '' }
    } ];

这使得代码像预期的那样提醒这个字符串:

<greater><expr operator="*"> <constant value="2" /> <parameter name=""/> </expr><parameter name=""/></greater>

演示:http://fiddle.jshell.net/AMnLS/1/

【讨论】:

    猜你喜欢
    • 2018-05-17
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    • 2012-07-12
    • 2011-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多