javascript - 在 Javascript 中处理多行 HTML

标签 javascript jquery html asp.net-mvc

我正在使用 Javascript 定义网页上的按钮行为。我想要的行为是在页面上的某个位置插入一些新的 HTML,但我想使用 MVC 扩展方法 Html.EditorFor 来定义将插入的新 HTML。

我想做的是:

$("#myButton").click(function() {
    $("@(Html.EditorFor(x => x.SomeModelProperty))").insertBefore(<somewhere>);
});

我遇到的问题是,调用 EditorFor 返回的 MvcHtmlString 呈现为多行 HTML,导致无效的 Javascript:

$("<div>
<label for="ModelData_SomeModelProperty">SomeModelProperty</label>
</div>
<div> ....

在理想的世界中,我可以让 EditorFor 以某种方式在一行上呈现以上所有内容,或者使用某种特殊的 Javascript 语法来定义多行字符串(例如使用单行字符串) C# 中的引号),但到目前为止我还是一片空白。

我尝试调用 ToHtmlString 并手动编辑生成的字符串以删除换行符,并且我知道我可以使用 /< 转义 Javascript 中的新行,但这样做的问题是我必须处理转义的 HTML,它看起来有点像下面这样:

$("&lt;div&gt;
&lt;label        for=&quot;ModelData_SomeModelProperty&quot;&gt;SomeModelProperty&lt;/label&gt;
&lt;/div&gt;
&lt;div&gt; .... (you get the idea)

我只是想知道是否有人尝试过类似的方法并且可能有更优雅的方法?

最佳答案

一种方法是将其写入 html 中的隐藏 div,而不是直接写入 javascript。然后你可以从 dom 读取它并在你的脚本中使用。

所以你的页面会有一个

<div style="display:none" id="hiddenArea">

...insert whatever you want in here 
with newline or whatever...

</div>

然后在你的 JavaScript 中:

$("#myButton").click(function() {
    var source = $("#hiddenArea").html();
    $(source).insertBefore(<somewhere>);
});

关于javascript - 在 Javascript 中处理多行 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28497800/

相关文章:

javascript - 如何将此 jQuery 添加到我的 Javascript 函数中?

php - 将一个巨大的 html 文件转换为 php 变量/echo

javascript - api v 3 谷歌地图选择城市

javascript - 使用 jQuery 克隆文本区域时如何防止克隆值

javascript - jQuery - 对每个()元素重复每个()但在循环之间重置

javascript - 如何通过从 javascript 函数的 <td> 调用 jquery 函数来基于类别加载子类别以动态添加行?

jquery - 带有垂直文本的卡住标题的表格

javascript - 容器内的 jQuery 捕捉元素

javascript - 查找并循环(this)JQuery 内的 span 元素?

javascript - 模块变量无法使用 DOM 元素启动