2015-12-09 3 views
1

Я пытаюсь написать цикл «для», который будет распечатывать свойства, связанные с объектом «document» (write, getElementById и т. Д.) На странице HTML. Не для чего-либо практического, просто для учебных целей. Если напрямую использовать объект «document», он работает нормально, но если я попытаюсь использовать переменную, которая имеет значение «document», это не сработает. Вот код, у меня есть:Как использовать документ в цикле for в HTML

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Title</title> 
     <script type="text/javascript"> 
      function objProps() { 
       var myObj=prompt("Object?"); 
        for (x in myObj) { 
         document.write(x + "<br />"); 
        } 
      } 
     </script> 
    </head> 
    <body> 
     <button onclick="objProps()">Click me to see the properties of an object</button> 
    </body> 
</html>  

Когда я типа «документ» в командной строке, я просто получить числовые значения, но если я изменить код в цикл из «myObj» на «документ» работает только как предполагалось.

Любая помощь очень ценится. Благодаря!

+2

В дополнение к другим ответам вы, вероятно, действительно не хотите использовать [document.write] (https://developer.mozilla.org/en-US/docs/Web/API/Document/write), поскольку он перезапишет все на странице. –

+0

спасибо @MattBurland, это хороший момент. Я бы не использовал его на странице с другим контентом, но сейчас я просто пытаюсь заставить эту функцию работать. – freginold

ответ

6

Когда я типа «документ» в строке, я просто получить числовые значения

Это потому, что вы используете for-in на строки. Возвращаемым значением prompt будет строка "document", а не объект документа.

Если вы хотите использовать имя строки для поиска глобального свойства (document является глобальным свойством), вы можете сделать это с помощью window глобального, который является ссылкой на глобальный объект:

for (x in window[myObj]) 

Это работает только для глобалов и только для глобальных глобальных свойств (как и для ES2015, не все глобальные переменные становятся свойствами глобального объекта).

Следует также отметить, что for-in посещений всего перечислимых объектов недвижимости. Я не думаю, что есть какая-либо спецификация для того, чтобы быть перечислены различные свойства document, поэтому ваши результаты могут отличаться от браузера к браузеру.


Ваш код становится жертвой The Horror of Implicit Globals(раскрытия: ссылка на мой анемией маленький блог). Не забудьте объявить переменные.

+0

Спасибо @ T.J.Crowder, я не знал о глобальном объекте, просто проверил его на вашей странице. Хорошая информация, теперь я знаю больше об этом. – freginold

2

Строка "document" не равна глобальной переменной document. Если вы пытаетесь получить доступ к глобальным переменным, используя имя переменного, вы можете использовать кронштейн обозначение:

function objProps() { 
 
     // var myObj=prompt("Object?"); 
 
     var myObj='document'; 
 
     for (x in window[myObj]) { 
 
      document.write(x + "<br />"); 
 
     } 
 
    } 
 
    objProps();

0

Вы можете использовать [] номенклатуру для использования строки:

<!DOCTYPE html> 
    <html> 
     <head> 
      <title>Title</title> 
      <script type="text/javascript"> 
       function objProps() { 
        var str = prompt("Object?"); 
        var myObj=window[str]; 
         for (x in myObj) { 
          document.write(x + "<br />"); 
         } 
       } 
      </script> 
     </head> 
     <body> 
      <button onclick="objProps()">Click me to see the properties of an object</button> 
     </body> 
    </html>  
Смежные вопросы