2

我有 jQuery 代码:

...
var poleVstupu= {id:['31'],platny:['1'],datum:['2013-08-05 20:23:38'], ... };

for(var poleName in poleVstupu)
{
    $('[name='+poleName+']').val(poleVstupu[poleName]).change();
}
...

在 Firefox 中此代码工作正常,但在 IE8 中它会抛出...run slowly消息。如果我运行 IE 内置调试​​器,在...run slowly消息后它会抛出object doesn't support this property or method,但如果我在行设置断点$('[name='+poleName ...,它不会显示object doesn't ...消息。

我该怎么做才能更快地处理代码并防止显示...run slowly消息?

4

2 回答 2

2

我正在回复此答案中的评论,因为它会更长并且包含代码,但它很可能不会成为答案。


浏览器很有可能不会索引该name属性,因此它每次都必须遍历文档中的每个元素以找到匹配的名称。如果您将搜索限制在表单中,您可能会获得更好的性能。例子:

var form = $("#form_id");

for(var poleName in poleVstupu)
{
    form.find('[name='+poleName+']').val(poleVstupu[poleName]).change();
}

(部分)非 jQuery 解决方案可能是直接从 DOM 访问表单元素。例子:

var form = $("#form_id")[0]; // Get the DOM reference of the form

for(var poleName in poleVstupu)
{
    jQuery(form.elements[poleName]).val(poleVstupu[poleName]).change();
}

它还可以帮助您遍历表单元素而不是对象。例子:

var form = $("#form_id")[0]; // Get the DOM reference of the form

for (var i = 0, len = form.elements.length; i < len; i++)
{
    var element = form.elements[i];
    if (typeof poleVstupu[element.name] !== "undefined")
      jQuery(element).val(poleVstupu[element.name]).change();
}

jQuery 的性能随着每个版本的增加而提高。你不能使用 1.10.x 甚至 2.x 吗?


如果你不参加,表现如何.change()


编辑:

无论如何,在非表单元素name上都是无效的,所以你不应该使用它。我会使用 id 并在需要执行此操作的所有元素上设置一个类:

$(".change-html").each(function() {
  if (typeof poleVstupu[this.id] !== "undefined") {
    $(this).html(poleVstupu[element.name]);
  }
});

或者,如果您不能使用 id,例如,因为您有重复项,请使用data-属性

<p data-change-html="your_name"></p>

$("[data-change-html]").each(function() {
  var element = $(this);
  var name = element.data("change-html");
  if (typeof poleVstupu[name] !== "undefined") {
    element.html(poleVstupu[name]);
  }
});

(但后者不会很快)。

于 2013-08-20T08:20:14.767 回答
0

您是否在虚拟机中运行 IE?如果是这样,请确保为虚拟机提供足够的 RAM 分配和 CPU 功率(如果可设置),以便脚本可以使用您计算机的大部分功能运行。

于 2013-08-19T10:44:29.520 回答