【问题标题】:Jquery .html replacer just empties my selector, what's wrong?Jquery .html 替换刚刚清空了我的选择器,怎么了?
【发布时间】:2010-06-14 20:35:35
【问题描述】:
$("#autoNames").html(function (index, html) {
                                    var begin = "<script language='javascript' type='text/javascript'> var names = [";
                                    var end = String('];' + '<' + '/' + 'script' + '>');
                                    var result = begin.concat(jsonService, end);
                                    $("#autoNames").html(result);
                                    return false;
                                });

我终其一生都无法弄清楚为什么这不起作用。我之前已经让 html 函数工作了,但是由于某种原因,这只是让我的 autoNames 标记为空......我在结果变量上调用了一个 alert() 并且该字符串中存在一些东西......有什么线索吗?

谢谢

【问题讨论】:

  • 只是一个包含“{value:”",value""},{...}"之类的字符串
  • 所有这些都有效,我知道这些都是真实的。将显示一个警报窗口。
  • 这毫无意义。你为什么使用回调?你在回调中使用什么参数? (无...)...另外,多余的String() 电话是怎么回事? ..看我的回答:)
  • jsonService 正在返回一个数组,然后您在周围添加[]?好像您的 jsonService 没有提供 json。为什么不将var names=[] 添加到您的jsonService 文件中,然后使用$.getScript()
  • jsonService 是一个简单明了的字符串,就像我处理它的方式一样。

标签: javascript jquery html


【解决方案1】:

当您将一个函数传递给.html() 时,该函数需要返回您希望它设置的值,如下所示:

$("#autoNames").html(function (index, html) {
   var begin = "<script type='text/javascript'> var names = [";
   var end = String('];' + '<' + '/' + 'script' + '>');
   return begin.concat(jsonService, end);
});

当前您正在设置 .html() 但返回 false,而外部 .html() 调用将其设置为空。或者,只需这样做,因为您正在处理一个元素:

var begin = "<script type='text/javascript'> var names = [";
var end = String('];' + '<' + '/' + 'script' + '>');
$("#autoNames").html(begin.concat(jsonService, end));

【讨论】:

  • jsonService 只是一个有效的字符串。这就是真正需要知道的一切。此外,就像其他 3 次尝试回答一样,这不起作用。不过谢谢。我知道,这似乎是一个奇怪的问题。 ://
  • @jphenow - 你在处理哪个浏览器?还有任何使用这些脚本标签的特殊原因吗?似乎 $.parseJSON()eval() 是您真正需要的。
  • 他们的错误不仅仅是因为我试图通过的对象的性质
  • @jphenow - 如果它是有效的 JavaScript,eval() 将和这个一样工作(它正是它的用途),只是 eval('var names=[' + jsonService '];'); alert(names);..if它是 not 有效的 JavaScript,任何方法都行不通。
  • 这是一个简短/简单的示例:stackoverflow.com/questions/1176603/… Encosia 有一些完整的文章,您会发现它们非常有用,总体设置并不复杂,只是一个网络方法和jQuery 调用:encosia.com/2008/06/26/…
【解决方案2】:

很想知道你想在这里做什么......无论如何:

$("#autoNames").html('<script>var names = [' + jsonService + '];</script>');

【讨论】:

  • 也将我的选择器设置为空。
  • “我的选择器”是什么意思?
  • 当我使用 .html 时,这件事最终在标签之间没有任何内容
  • jQuery 去掉脚本标签并执行它们。
  • 它们仍然通常出现在某个地方不是吗?我可以发誓他们仍然可以在某个地方找到
【解决方案3】:

将函数传递给html 方法时,您应该返回元素应设置为的HTML。我看不出有任何理由首先需要使用该重载(它用于基于集合中的每个元素动态生成内容);您可能只想使用该函数中的代码:

var begin = "<script language='javascript' type='text/javascript'> var names = [";
var end = String('];' + '<' + '/' + 'script' + '>');
var result = begin.concat(jsonService, end);
$("#autoNames").html(result);

【讨论】:

  • 好点。虽然没有工作。不过,我会在继续调试的同时保持这样的状态,因为它比原来的要好。我是这样开始的,因为当我第一次想到它时,我认为需要更多功能。
【解决方案4】:

我错过了什么,或者你只是在那个 div 里面放了一个 JS 数组? 看起来你需要为每个或类似做一些来获取数组值并将它们放在 html 中。

也许只是我错过了一些细节,但看起来很奇怪。

而那个 jsonService 真的是一个 json 吗?如果是,那么你需要:

var jsonObj = eval("("+jsonService+")");

然后像这样访问它的值:

alert(jsonObj.valueName);

【讨论】:

    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    相关资源
    最近更新 更多