Можно ли использовать переменную для вызова объекта, имя которого совпадает со значением переменной?
-
13-09-2019 - |
Вопрос
Допустим, у меня есть функция, которой передается строка, изначально полученная из getElementById, и у меня есть объект с тем же именем, что и значение этой строки. Есть ли способ вызвать этот объект?Я не узнаю, какой объект мне нужен, пока не получу это значение из идентификатора элемента.
Например:
StartingFunction(SomeID){
someVariable = document.getElementById(SomeID).id
somefuntion(someVariable)
}
someFunction(ElementID){
// need to call Object.Value of whichever object is named the same as the value of
//ElementID here
}
ElementID.Value, очевидно, не будет работать, поскольку ElementID — это просто переменная, а не объект...
Решение
Вы можете передать элемент непосредственно в someFunction.
Например:
StartingFunction(SomeID){
var element = document.getElementById(SomeID);
somefuntion(element);
}
someFunction(element){
alert(element.id);
alert(element.value);
// Any other processing you want to do with element
}
Или, если вам нужно получить элемент из идентификатора, просто используйте getElementById
someFunction(id) {
var element = document.getElementById(id);
alert(element.value);
// Any other processing you need to do with the element DOM object
}
Другие советы
То, что вы называете ElementID, на самом деле является самим элементом, поскольку вы передаете document.getElementById() в некоторую функцию.
если функция находится в глобальной области видимости, вы можете просто window[ElementID]
например:
someFunction(ElementID){
return window[ElementID].value;
}
Не делай этого.Это плохой дизайн, который приведет к огромной боли и трудно обнаруживаемым ошибкам в будущем.
Вместо этого используйте глобальный объект, содержащий все объекты, на которые вы хотите ссылаться.
var valueMap = new Object();
function setValue(id, valueObject) {
valueMap[id] = valueObject;
}
function someFunction(id) {
return valueMap[id].Value;
}
Это не имеет никакого смысла:
someVariable = document.getElementById(SomeID).id
Вы получаете идентификатор элемента с идентификатором SomeID... почему бы просто не использовать SomeID?
Если вам нужен атрибут значения объекта с идентификатором SomeID, просто выполните:
document.getElementById(SomeID).value