gpt4 book ai didi

javascript - 这种查找相关输入字段的方法是否可以优化?

转载 作者:行者123 更新时间:2023-11-28 19:29:50 25 4
gpt4 key购买 nike

我正在开发一个脚本,需要根据同一行的列中的特定文本查找隐藏的输入值。我无法控制 HTML。

Example Fiddle

在此工作 fiddle 中,我们必须首先找到包含文本“Year to Date”的最后一列(由于嵌套表而导致最后一列)。然后我们使用大量 jQuery 在同一行中查找包含我们需要的值 2.33333 的隐藏输入。

我写的 JavaScript 可以工作,但我看到很多重复,而且看起来效率很低。有没有办法优化这组变量的判定?

var YTD = $('td:contains("Year to Date")').last().siblings().eq(7).find('input').val();
var EOY = $('td:contains("End-of-Year")').last().siblings().eq(7).find('input').val();
var qtr1 = $('td:contains("Quarter 1")').last().siblings().eq(7).find('input').val();
var qtr2 = $('td:contains("Quarter 2")').last().siblings().eq(7).find('input').val();
var qtr3 = $('td:contains("Quarter 3")').last().siblings().eq(7).find('input').val();
var qtr4 = $('td:contains("Quarter 4")').last().siblings().eq(7).find('input').val();

我们不能指望相关输入字段的 id/name 模式,除非它们总是出现在与原始 td 相关的 eq(7) 中。

最佳答案

您可以将其提取到一个函数中,这将有助于代码重用:

function findInputFromCellText(cellText) {
return $('td:contains("' + cellText + '")')
.last().siblings().eq(7).find("input").val();
}

那么你可以这样做:

var vals = {
YTD: findInputFromCellText("Year to Date"),
EOY: findInputFromCellText("End-of-Year"),
qtr1: findInputFromCellText("Quarter 1")
/* So on */
};

由于季度似乎遵循某种模式,您可以这样做:

var vals = {
YTD: findInputFromCellText("Year to Date"),
EOY: findInputFromCellText("End-of-Year"),
quarters: [1, 2, 3, 4].map(function(k) {
return findInputFromCellText("Quarter " + k);
})
};

然后您将访问 vals.YTDvals.quarters[0] 等。

请注意,在最后一个示例中,vals.quarter[0] 将是第一个季度,vals.quarter[3] 将是是最后季度。

现在,如果您想要效率,您可以轻松地做到这一点:

var findInputFromCellText = (function() {
var cache = {};
return function(cellText) {
if (cellText in cache) return cache[cellText].val();
var result = $('td:contains("' + cellText + '")')
.last().siblings().eq(7).find("input");
cache[cellText] = result;
return result.val();
}
})();

关于javascript - 这种查找相关输入字段的方法是否可以优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27073361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com