jQuery .html()将html代码输出为文本而不是html

时间:2013-06-27 14:02:55

标签: jquery html razor

我有这个问题,我建立一个我知道是合法的字符串(单独检查出来),但是当我将它作为参数发送到我的jQuery函数时,.html()函数仍然将它作为字符串输出!我正在使用Razor VB作为我的服务器端语言。

这是输出:

<table><tr><th>Cause</th><th>Delay</th></tr></table>

字符串构建器:

Dim obstacleList As String

obstacleList = "<table><tr><th>Orsak</th><th>Försening</th></tr>"

For Each obstRow In obstData

   obstacleList = obstacleList & "<tr><td>" & obstRow.cause & "</td><td>" & obstRow.hoursplaned & "</td></tr>"

Next

   obstacleList = obstacleList & "</table>"

我将变量放入的代码:

<script type="text/javascript">popup("@obstacleList" , @row.id);</script>

jQuery代码:

function popup($dbData, $rowid) {
   $('<div class="tooltip' + $rowid + '"></div>').fadeIn("fast").appendTo('body');
   $('.tooltip' + $rowid + '').html($dbData);
}

3 个答案:

答案 0 :(得分:1)

我发现问题是什么,显然你需要在传出参数中指定razor-vb字符串用作原始html数据。否则你的两个解决方案都有效!

<script type="text/javascript">popup("@(html.Raw(obstacleList))" , @row.id);</script>

答案 1 :(得分:0)

使用

$('.tooltip' + $rowid + '').append($dbData); 

而不是

$('.tooltip' + $rowid + '').html().

$('.tooltop' + $rowid + '').html(function(index, yourOldHtml) {
    return $dbData;
}

如果$dbData是您的<table><tr><th>Cause</th><th>Delay</th></tr></table>字符串。

Fiddle here

<强>更新

正如@roasted指出的那样,append()方式与html()完全不同,因为它首先清空了元素。使用.empty().append($dbData)。谢谢烤!

答案 2 :(得分:0)

我不确定是什么原因引起了你的问题,但是没有必要选择刚刚创建的div(你已经将它存储在内存中) - 你可以链接命令;

function popup(dbData, rowid) {
   $('<div class="tooltip' + rowid + '"></div>') // create a div
        .html(dbData) // first insert html
        .appendTo('body') // before attaching to DOM
        .fadeIn('fast'); // and fading in
}

我也冒昧地从变量名中删除美元符号;

  1. 不需要
  2. 包含jQuery集合的变量的常见命名约定(这两者都不是)