将 HTML 或 XML 代码存储在 javascript 变量中

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/5125506/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-25 16:03:00  来源:igfitidea点击:

Storing HTML or XML code in javascript variables

javascriptjqueryxmlcdatamechanicalturk

提问by Mark

I'd like to store a some HTML/XML markups in a javascript variable. The problem is that the text is relatively large. For example how can I store the following XML piece in a javascript variable?

我想在 javascript 变量中存储一些 HTML/XML 标记。问题是文字比较大。例如,如何将以下 XML 片段存储在 javascript 变量中?

    <QuestionForm xmlns="[the QuestionForm schema URL]">
  <Overview>
    <Title>Game 01523, "X" to play</Title>
    <Text>
      You are helping to decide the next move in a game of Tic-Tac-Toe.  The board looks like this:
    </Text>
    <Binary>
      <MimeType>
        <Type>image</Type>
        <SubType>gif</SubType>
      </MimeType>
      <DataURL>http://tictactoe.amazon.com/game/01523/board.gif</DataURL>
      <AltText>The game board, with "X" to move.</AltText>
    </Binary>
    <Text>
      Player "X" has the next move.
    </Text>
  </Overview>
  <Question>
    <QuestionIdentifier>nextmove</QuestionIdentifier>
    <DisplayName>The Next Move</DisplayName>
    <IsRequired>true</IsRequired>
    <QuestionContent>
      <Text>
        What are the coordinates of the best move for player "X" in this game?
      </Text>
    </QuestionContent>
    <AnswerSpecification>
      <FreeTextAnswer>
        <Constraints>
          <Length minLength="2" maxLength="2" />
        </Constraints>
        <DefaultText>C1</DefaultText>
      </FreeTextAnswer>
    </AnswerSpecification>
  </Question>
  <Question>
    <QuestionIdentifier>likelytowin</QuestionIdentifier>
    <DisplayName>The Next Move</DisplayName>
    <IsRequired>true</IsRequired>
    <QuestionContent>
      <Text>
        How likely is it that player "X" will win this game?
      </Text>
    </QuestionContent>
    <AnswerSpecification>
      <SelectionAnswer>
        <StyleSuggestion>radiobutton</StyleSuggestion>
        <Selections>
          <Selection>
            <SelectionIdentifier>notlikely</SelectionIdentifier>
            <Text>Not likely</Text>
          </Selection>
          <Selection>
            <SelectionIdentifier>unsure</SelectionIdentifier>
            <Text>It could go either way</Text>
          </Selection>
          <Selection>
            <SelectionIdentifier>likely</SelectionIdentifier>
            <Text>Likely</Text>
          </Selection>
        </Selections>
      </SelectionAnswer>
    </AnswerSpecification>
  </Question>
</QuestionForm>

采纳答案by Orbit

var string = (<r><![CDATA[

   The text string goes here.  Since this is a XML CDATA section,
   stuff like <> work fine too, even if definitely invalid XML. 

]]></r>).toString();

回答by Domenic

I assume your question is how to take that exact string, and not one you retrieve from a web service or Ajax call or the like. While this is a pretty bad idea for lots of reasons, to answer the question...

我假设您的问题是如何获取那个确切的字符串,而不是您从 Web 服务或 Ajax 调用等中检索的字符串。虽然出于多种原因,这是一个非常糟糕的主意,但要回答这个问题......



There is no really good way of doing this in JavaScript.Some browsers support line continuation by placing a \at the end of the line, so you would do something like:

在 JavaScript 中没有真正好的方法来做到这一点。某些浏览器通过在行\尾放置 a 来支持行延续,因此您可以执行以下操作:

var xml = '<QuestionForm xmlns="[the QuestionForm schema URL]">\
  <Overview>\
    <Title>Game 01523, "X" to play</Title>\
    ...';

But this is nonstandard, and in fact directly contradicts the JS spec:

但这是非标准的,实际上直接与 JS 规范相矛盾:

A 'LineTerminator' character cannot appear in a string literal, even if preceded by a backslash.

'LineTerminator' 字符不能出现在字符串文字中,即使前面有反斜杠。

The only really reliable way of doing this would be with manual string concatenation:

唯一真正可靠的方法是使用手动字符串连接:

var xml = '<QuestionForm xmlns="[the QuestionForm schema URL]">' + "\n" +
'      <Overview>' + "\n" +
'        <Title>Game 01523, "X" to play</Title>' + "\n" +
'        ...';

You can make this a bit neater like so:

你可以像这样使它更整洁一点:

var xml = ['<QuestionForm xmlns="[the QuestionForm schema URL]">',
'      <Overview>',
'        <Title>Game 01523, "X" to play</Title>'
'        ...'].join("\n");

But it still sucks.

但它仍然很糟糕。

Also, with all of these approaches, you would have to escape any single quotes, i.e. replace 'with \'. I didn't see any in your XML snippet at first glance though, which is good.

此外,使用所有这些方法,您必须转义任何单引号,即替换'\'. 乍一看,我在您的 XML 代码段中没有看到任何内容,这很好。

回答by vkGunasekaran

I think you might have wanted to store html/xml code in javascript and display in textarea or some other input elements. If this is your intention this will help you.

我想您可能希望将 html/xml 代码存储在 javascript 中并显示在 textarea 或其他一些输入元素中。如果这是您的意图,这将对您有所帮助。

Instead of javascript variable, store your code in a div and hide using css ex: display:none. When you want to show the code, you can use $('#div id').text().

而不是 javascript 变量,将您的代码存储在 div 中并使用 css ex: 隐藏display:none。当您想显示代码时,可以使用$('#div id').text().

回答by Anton K.

I recommend you use JSON, matey. It is less verbose. And javascript has methods to handle it nicely. In case you need to work with XML later in your classes, you can write a simple adapter.

我建议你使用 JSON,伙计。它不那么冗长。并且 javascript 有方法可以很好地处理它。如果您稍后需要在您的类中使用 XML,您可以编写一个简单的适配器。