我想知道是否有办法提取我传递给Math.max函数的元素。
var maxi = Math.max(document.getElementById('textBox1').value,
document.getElementById('textBox2').value,
document.getElementById('textBox3').value,
document.getElementById('textBox4').value,
document.getElementById('textBox5').value);
我不仅要获得数字,还要获取元素,例如,如果10是与document.getElementById('textBox1').value
提取该元素相关联的最大数字。
答案 0 :(得分:1)
如果您不需要Math.max()
:
var elements = [document.getElementById('textBox1'),
document.getElementById('textBox2'),
document.getElementById('textBox3'),
document.getElementById('textBox4'),
document.getElementById('textBox5')];
var maxIndex = -1;
var maxVal = -Infinity;
for (var i=0; i<elements.length; i++) {
if (elements[i].value > maxVal) {
maxVal = elements[i].value;
maxElement = elements[i];
}
}
循环结束后,maxVal
将具有最大值,maxElement
将成为关联的DOM元素。
答案 1 :(得分:1)
您可以定义自己的方法,而不是像{/ p>这样的Math.max
方法
function myMaxElement = function() {
var elementWithMaxValue = null,
maxValue = -Infinity;
for (var i = 0; i < arguments.length; i++) {
if (arguments[i].value >= maxValue) {
maxValue = arguments[i].value;
elementWithMaxValue = arguments[i];
}
}
return elementWithMaxValue;
}
现在用这样的所有参数调用此方法
var maxElement = myMaxElement(document.getElementById('textBox1'),
document.getElementById('textBox2'),
document.getElementById('textBox3'),
document.getElementById('textBox4'),
document.getElementById('textBox5'));
console.log(maxElement);
PS:我在运行时写了这段代码,所以可能是那里的类型。我使用了参数,它是一个类似于数组的对象,并在所有方法中都被接收。 MDN documentation for arguments
答案 2 :(得分:0)
如果您将x.y
作为参数传递给函数,则不会传递有关x
的任何信息。要避免此问题,您需要传递x和从x访问y的方法。一个例子可能是这个:
function myMax(f) {
var maxEl = arguments[1];
var maxVal = f(maxEl);
for (var i=1; i<arguments.length; i++) {
if (maxVal < f(arguments[i])) {
maxEl = arguments[i];
maxVal = f(maxEl);
}
}
return { element : maxEl, value: maxVal }
}
// usage
var res = myMax(function(el) { return +el.value; },
document.getElementById('textBox1'),
document.getElementById('textBox2'),
document.getElementById('textBox3'),
document.getElementById('textBox4'),
document.getElementById('textBox5'));
console.log('Max Element : ', res.element, ' with value : ', res.value);