Можно ли использовать переменную для вызова объекта, имя которого совпадает со значением переменной?

StackOverflow https://stackoverflow.com/questions/1266537

  •  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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top