Javascript 合并多个(几乎)重复的每条语句
我有以下几组几乎完全相同的Javascript 合并多个(几乎)重复的每条语句,javascript,jquery,Javascript,Jquery,我有以下几组几乎完全相同的语句。我需要再添加20个类似的模式。我试图找出如何将这些小变量更新为一条语句(而不是将同一个稍有不同的语句更新20次) 从你的问题来看,目标似乎是提取一个可以多次执行并产生类似结果的函数。通过定义对参数化变量执行相同迭代、查找和追加操作的函数,可以多次使用此函数 这应该是你想要的: function updateDom(arrayOfValues, parentElementId, childElementId) { $.each(arrayOfValues,
语句。我需要再添加20个类似的模式。我试图找出如何将这些小变量更新为一条语句(而不是将同一个稍有不同的语句更新20次)
从你的问题来看,目标似乎是提取一个可以多次执行并产生类似结果的函数。通过定义对参数化变量执行相同迭代、查找和追加操作的函数,可以多次使用此函数
这应该是你想要的:
function updateDom(arrayOfValues, parentElementId, childElementId) {
$.each(arrayOfValues, function(index, val) {
$('#' + parentElementId).find('#' + childElementId)
.append($('<td class="tableCells">')
.append(val.value + '</td>'))});
}
函数更新域(ArrayOfValue、parentElementId、childElementId){
$.each(数组值、函数(索引、值){
$(“#”+parentElementId)。查找(“#”+childElementId)
.append($('')
.append(val.value+“”))};
}
您可以提取函数,以便:
事实上,有很多方法可以重构这段代码 第一步,将您的通用逻辑提取到一个可以重用的函数中,而不是反复重复
function addTableCells ( elements, targetId ) {
$.each(elements, function(index, val) {
$("#matrix_datatable").find(targetId)
.append($('<td class="tableCells">'+ val.value +'</td>');
});
}
函数addTableCells(元素,targetId){
$.each(元素、函数(索引、val){
$(“#矩阵_数据表”).find(targetId)
.追加($(''+val.value+'');
});
}
我不确定这是否是您打算做的,但包装您的产品怎么样
每个都在一个foreach中:)
var数据点=['name','description','subtitle'];
dataPoints.forEach((字段)=>{
var tableId=;
$.each(mainData[field])。源值,函数(index,val){
$(“#矩阵_数据表”).find(“#”+tableId)
.append($('')
.append(val.value+'')
)
});
});
您可以这样做
var lst = [mainData.name.source_values, mainData.description.source_values, mainData.subtitle.source_values];
var ids = ["mNames", "mDescription", "mSubtitle"];
for (i = 0; i < lst.length; i++) {
$.each(lst[i], function(index, val) {
$("#matrix_datatable").find( "#" + ids[i] )
.append($("<td class='tableCells'>")
.append(val.value + "</td>")
});
}
var lst=[mainData.name.source_值,mainData.description.source_值,mainData.subtitle.source_值];
变量ID=[“mNames”、“mddescription”、“mSubtitle”];
对于(i=0;i
闻起来像是一个提取方法的开始!@Taplar我不知道那是什么,也不知道如何使用它。method==一个函数。制作一个具有你逻辑的公共部分的函数,并将它们之间不同的变量传递给它使用。你有没有可能给我一个小小的开始?大多数答案都过于关注那个应用程序了将“someting”结尾到dom元素无效。在创建dom元素时,添加未关闭的“”将自动关闭它。您不是在添加字符串。您可以执行类似操作如何以及在何处存储arrayOfValues
和childElementId
,以便此函数可以访问?这些是数组的名称吗?@jonmrich作为全局变量或局部变量,从其他一些Routinet获取,以确保安全:append($('',{text:val.value}))
可能该值包含他想要的html。Idk他的整个用例。然后更改HTMLH的文本这与此有什么不同?如果他的值确实包含html并且格式不正确,那么这是他必须解决的其他问题。你永远不知道可以包含什么值我觉得在这方面帮助你有点不好:重构是学习的最佳方式但是还有很多时候你需要重构代码,所以请记住并好好享受:)这看起来是最好的方法,我会回应之前关于以这种方式追加
,而不是将其减少为append函数中的append行,比如:.append($('',{class:“tableCells”,text:val.value});
function append(id) {
return function(index, val) {
$('#matrix_datatable').find(id)
// if your value doesn't contain HTML, opt for this
.append($('<td>', { class: 'tableCells', text: val.value })
// if it contains html, replace `text` with `html`
);
};
}
$.each(mainData.name.source_values, append('#mName'));
$.each(mainData.description.source_values, append('#mDescription'));
$.each(mainData.subtitle.source_values, append('#mSubtitle'));
for (let i = 0; i < 3; i++) {
$.each(mainData[$dataPoints[i]].source_values, append('#'+$tableIds[i]))
}
function addTableCells ( elements, targetId ) {
$.each(elements, function(index, val) {
$("#matrix_datatable").find(targetId)
.append($('<td class="tableCells">'+ val.value +'</td>');
});
}
var dataPoints = ['name','description','subtitle'];
dataPoints.forEach( (field) => {
var tableId = <generate table id from field string, add letter m and camelcase the field name>;
$.each(mainData[field].source_values, function(index, val) {
$("#matrix_datatable").find('#' + tableId)
.append($('<td class="tableCells">')
.append(val.value + '</td>')
)
});
});
var lst = [mainData.name.source_values, mainData.description.source_values, mainData.subtitle.source_values];
var ids = ["mNames", "mDescription", "mSubtitle"];
for (i = 0; i < lst.length; i++) {
$.each(lst[i], function(index, val) {
$("#matrix_datatable").find( "#" + ids[i] )
.append($("<td class='tableCells'>")
.append(val.value + "</td>")
});
}