实际上,我找到了解决这两个问题的方法,并将与所有想要做出奇怪的事情的人分享:D
第一个问题解决方案 - 在两个 foreach 循环之间提取 grid.dataSource.data()[e.rowIdx].set(e.colName, e.value) - 由于某种原因,它会破坏当前行索引
$.each(copiedData, function(i, el) {
var IdxNamesValues = []
$.each(grid.select(), function(i2, el2) {
var row = $(el2).closest("tr");
var rowIdx = $("tr", grid.tbody).index(row);
var colIdx = $("td", row).index(el2);
if (el.cellIndex === el2.cellIndex) {
var colName = $('#grid').find('th').eq(el.cellIndex).text();
var value = el.innerText;
IdxNamesValues.push({rowIdx, colName, value});
el2.innerText = el.innerText;
}
});
$.each(IdxNamesValues, function(i, e) {
grid.dataSource.data()[e.rowIdx].set(e.colName, e.value);
})
})
第二个问题解决方案 - 我发现我可以通过它的 HTML 表示来获得 kendo 小部件。例如,如果我选择一个带有嵌套 kendoDropDownList 小部件的列,然后单击复制,我将得到以下 HTML。在那之后,我可以说copiedData.find('.k-widget input').data("kendoDropDownList") 将 kendoDropDownList 作为一个对象,其中包含所有选项、数据源等......
<td class="k-state-selected" role="gridcell" aria-selected="true">
<span title="" class="k-widget k-dropdown k-header" unselectable="on" role="listbox" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-owns="" aria-disabled="false" aria-busy="false" aria-activedescendant="f9fc2fa4-2c3d-4d9c-beef-7d924706fa72" style=""><span unselectable="on" class="k-dropdown-wrap k-state-default"><span unselectable="on" class="k-input">Jane Doe</span><span unselectable="on" class="k-select" aria-label="select"><span class="k-icon k-i-arrow-60-down"></span></span></span><input data-role="dropdownlist" data-text-field="text" data-value-field="id" data-bind="value: name, source: items" style="display: none;"></span>
</td><td class="" role="gridcell">29</td><td class="" role="gridcell">testt</td>
我希望能为别人节省很多时间:)