如何在javascript中传递带有转义字符的字符串?

时间:2014-09-23 10:10:55

标签: javascript escaping

这里有很多这样的问题,但没有一个能够解决我的问题。我正在尝试在java应用程序的SWT浏览器中实现“查看更多”和“少看”之间的简单切换。我是使用此代码进行一些更改 http://jsfiddle.net/8u2jF/

我的代码就像

<div>
    <p id="textArea"><!-- This is where I want to additional text--></p>
</div>


<a id="toggleButton" onclick="toggleText(encodeURI('hsd\\nhe'));" href="javascript:void(0);">See More</a>

var status = "less";

function toggleText(s)
{
    var text="Here is some text that I want added to the HTML file";

    if (status == "less") {
        document.getElementById("textArea").innerHTML=decodeURI(s);
        document.getElementById("toggleButton").innerText = "See Less";
        status = "more";
    } else if (status == "more") {
        document.getElementById("textArea").innerHTML = "";
        document.getElementById("toggleButton").innerText = "See More";
        status = "less"
    }
}

但是当我运行它时\ n不被视为新行字符?我如何让Javascript理解它是换行符?

我将在java SWT应用程序中使用此脚本并使用SWT Browser调用它。我将传递一个字符串作为参数,该参数可能包含任何转义字符。我该如何处理它们?

2 个答案:

答案 0 :(得分:0)

在HTML中,没有\t\n\r这样的元素。使用<br/>代表换行,&nbsp;&nbsp;&nbsp;&nbsp;代表\t(或更好的css margin-right)。

&#13;
&#13;
function addText(text) {
  $('span').append("<br/>First line goes here <br/> Second line goes here");
}

function replaceText(text) {
  $('span').append(
    text.replace("\\n", '<br/>')
  );
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div onClick="replaceText('<br/>First Line\\nSecond Line')">Click to add and replace</div>
<div onClick="addText('<br/>First line goes here <br/> Second line goes here')">Click to see magic</div>
<span></span>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

如果您使用

toggleText(encodeURI('hsd\nhe'));

(使用新行\ n)

而不是

toggleText(encodeURI('hsd\\nhe'));

(第一个\防止第二个被解释)

结果将是

<p id="textArea">hsd
he</p>

因此,源代码中有一个新行,但这在html呈现中不可见 如果您想在渲染中添加新行,则需要添加html标记