Может ли Firebug сообщить мне имя объекта в JavaScript?
-
05-07-2019 - |
Вопрос
В последнее время я добавляю на свои страницы довольно много JavaScript, но выучил все это в классической манере «сидеть в штанах».Когда я хочу, чтобы моя страница что-то сделала, я гуглю и экспериментирую, пока не получу желаемый результат.
На моих страницах часто встречаются объекты, которые я хочу активировать/деактивировать, скрыть, показать и т. д., но, пропустив подробное введение в JavaScript, я понятия не имею, как эти объекты называются.Я нажимаю на объекты с открытым Firebug, ожидая увидеть какое-то полное имя объекта, но не получаю никакой радости.Мне просто нужно иметь возможность делать что-то вроде form.button.value="something" и знать имя этого объекта.
Есть идеи?
Спасибо.
Решение
Пока вы выполняете код Javascript, у вас есть все локальные переменные в текущей области, поэтому, если у вас есть следующий код:
var myObject = New Object();
myObject.Person = New Object();
myObject.Person.Name = "Mark";
myObject.Person.Gender = "Male";
myObject.Name = "object1";
...вашим корневым объектом будет myObject, и вы ссылаетесь на дочерние объекты через точечную запись.
Однако благодаря реализации DOM в браузере вы также наследуете window
объект через this
ключевое слово.Фактически, вы можете оставить this
ключевое слово для простых ситуаций, т.е.когда вы не используете замыкания.Таким образом, вы можете получить доступ к функциям Javascript на верхнем уровне, просто используя имя функции.
Если вы хотите получить доступ к определенным элементам, как это звучит так, как будто вы этого хотите, вам нужно изучить DOM, а не использовать синтаксис, который вы предлагали (это похоже на Javascript 1990-х годов).Корневой элемент, который вам нужно знать, — это HTMLDocument
объект, доступ к которому осуществляется через document
свойство.Вы можете обнаружить элементы с конкретными Id
(нет Name
) атрибуты с помощью getElementById
метод элемента документа.Конечно, будет полезно, если вы с самого начала присвоите элементу уникальный идентификатор.Вы также можете рекурсивно использовать childNodes
коллекцию для ручного перебора элементов, пока не найдете то, что хотите.В качестве альтернативы, если вы действительно не можете предоставить идентификатор, вы также можете использовать getElementsByTagName
метод, который прикреплен к каждому элементу в DOM.
Пример:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<TITLE></TITLE>
<META NAME="Generator" CONTENT="TextPad 4.6">
<META NAME="Author" CONTENT="?">
<META NAME="Keywords" CONTENT="?">
<META NAME="Description" CONTENT="?">
<SCRIPT LANGUAGE="Javascript">
<!--
function DoSummat()
{
var divInside = document.getElementById("Inside");
divInside.textContent = "This text will appear inside.";
}
//-->
</SCRIPT>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#FF0000" VLINK="#800000" ALINK="#FF00FF" BACKGROUND="?">
<FORM>
<INPUT TYPE="BUTTON" onclick="DoSummat();" NAME="MyButton" VALUE="Press Me">
</FORM>
<DIV ID="Outside">
<DIV ID="Middle">
<DIV ID="Inside"></DIV>
</DIV>
</DIV>
</BODY>
</HTML>
Другие советы
Элементы обычно идентифицируются с помощью id
атрибут.Пример:
<input type="submit" id="saveButton" value="Save" />
Вы можете использовать getElementById
метод для получения ссылки на элемент:
var b = document.getElementById('saveButton');
b.value = 'Saving...';
Ну, раз уж ты дал form.button.value="something"
Например, я предполагаю, что вы хотите управлять объектами HTML.Вы можете присвоить им идентификатор, например:<form id="my_form"...а затем получить элементы по идентификатору из JS, поскольку функция даже вызывается, getElementById().
document.getElementById('my_form').button.value = 'something';
Ваш вопрос очень расплывчатый, поэтому я не могу дать вам нужный ответ.
Object
s не могут быть «активированы»/«деактивированы», и у них нет «имен» (они могут иметь name
имущество, если вы это имеете в виду).
Например, дано:
var foo = {};
foo
это переменная у него есть значение, которое является объектом.Объект не является переменной (объект, имеющий «имя»).Данный:
bar = foo; foo = null;
foo
сейчас null
и объект, который содержал foo, теперь сохраняется как bar
.
Вы не сможете этого сделать.Имя переменной не привязано к переменной и не передается между функциями.Лучшее, что вы можете сделать, — это написать функцию, которая принимает строку и преобразует ее обратно в переменную:
function printVar(name) {
console.log(name + ": " + window[name]);
}
Конечно, есть много что-то не так с этим.Я бы рекомендовал просто сделать два вызова журнала:
console.log("foo");
console.log(foo);
или, используя синтаксис в стиле printf:
console.log("foo: %o", foo);