jQuery . HTML()和.append()呈现的内容与HTML DOM innerHTML属性不同

jQuery .html() and .append() rendering content differently to HTML DOM innerHTML property

本文关键字:HTML DOM innerHTML 属性 append jQuery      更新时间:2023-09-26

我正在使用MVC部分视图创建一些动态内容,该视图作为字符串返回给AJAX调用。动态内容包括一些Kendo UI小部件(下拉列表、日期选择器等)(在局部视图中配置和创建),然后在页面上呈现。当使用jQuery .html().append()时,这一切都很好-一切都加载得很好,并且Kendo小部件无需做任何事情即可初始化。

但是由于加载的动态内容的数量和总体时间,我正在考虑使用HTML DOM innerHTML属性作为一个更好的性能选项,但这不起作用。内容被加载,但是Kendo控件没有被初始化,即使部分视图包含了用来初始化小部件的JS。

// this doesn't work
var container = document.getElementById("content_" + id);
container.innerHTML = result.Data.PartialView;
// this returns undefined,a nd $("#dropDownList_1").data() returns an empty {} object
$("#dropDownList_1").data("kendoDropDownList")
// but this works
$("#content_" + id).html(result.Data.PartialView);

来自部分视图的片段,其中包含用于初始化Kendo小部件的JS:

<input id="dropDownList_1" name="dropDownList_1" type="text" /><script>
    jQuery(function(){jQuery("#dropDownList_1").kendoDropDownList({"dataSource":[{"Text":"Day","Value":"1"},{"Text":"Week","Value":"2"},{"Text":"Month","Value":"3"}],"dataTextField":"Text","dataValueField":"Value","optionLabel":"Please select"});});
</script>

有没有人知道为什么使用HTML DOM innerHTML属性不执行JS来初始化小部件?

jQuery.html()是一个更复杂的innerHTML包装器。它检查浏览器的兼容性,并对脚本进行评估。

使用html () .

为什么html()执行JavaScript,但innerHTML不't?