Pergunta

Eu fui adicionando um pouco de javascript para minhas páginas ultimamente, mas tenho aprendido tudo isso em moda clássica assento-de-o-calças. Quando eu quero minha página para fazer alguma coisa, eu google e experimentar até conseguir o resultado que eu quero.

Com freqüência tenho objetos em minhas páginas que eu quero para ativar / desativar, ocultar, show, etc., mas - depois de ter falhado a introdução rigorosa para javascript - Não tenho a menor idéia de como estas coisas se nomeado. Eu clicar em objetos com abrir o Firebug, esperando ver algum nome totalmente qualificado para o objeto, mas não obter alegria. Eu só preciso ser capaz de fazer algo assim form.button.value = "algo", e precisa saber o nome daquele objeto.

Todas as idéias?

Graças.

Foi útil?

Solução

Enquanto você estiver executando código Javascript, você tem todas as variáveis ??locais no escopo atual, por isso, se você tivesse o seguinte código:

var myObject = New Object();
myObject.Person = New Object();
myObject.Person.Name = "Mark";
myObject.Person.Gender = "Male";
myObject.Name = "object1";

... o seu objeto raiz seria myObject, e você se referir a objetos descendentes através da notação de ponto.

No entanto, graças à implementação do DOM no navegador, você também herdar o objeto window via a palavra-chave this. Na verdade, você pode deixar o this palavra-chave para fora para situações simples ou seja, quando você não estiver usando encerramentos. Portanto, você pode acessar as funções de JavaScript no nível superior usando apenas o nome da função.

Se você quiser elementos de acesso específicos, como parece que você está querendo, você precisa aprender o DOM, e não usar a sintaxe que você estava sugerindo (que soa como 1990 Javascript). O elemento raiz que você precisa saber é o objeto HTMLDocument, acessada através da propriedade document. Você pode descobrir elementos com Id específico (não Name) atributos usando o método getElementById do elemento documento. Claro, ajuda se você deu o seu elemento de uma identificação única desde o início. Você também pode recursivamente usar a coleção childNodes iterar manualmente através de elementos até encontrar o que você quer. Alternativamente, se você realmente não pode fornecer um ID, você também pode usar o método getElementsByTagName, que é anexado a cada elemento no DOM.

Exemplo:

<!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>

Outras dicas

Os elementos são geralmente identificadas usando o atributo id. Exemplo:

<input type="submit" id="saveButton" value="Save" />

Você pode usar o método getElementById para obter uma referência a um elemento:

var b = document.getElementById('saveButton');
b.value = 'Saving...';

Bem, desde que você deu o exemplo form.button.value="something", eu estou supondo que você quer objectos HTML controle. Você pode atribuir-lhes uma identificação, por exemplo .:

document.getElementById('my_form').button.value = 'something';

Você está questão é extremamente vaga, então eu não posso lhe dar a resposta que você precisa.

Objects não pode ser "ativado" / "desativado" e eles não têm "nomes" (eles podem ter uma propriedade name, se é isso que você quer dizer).

Por exemplo, dado:

var foo = {};

foo é uma variável que acontece de ter um valor que é um objeto. O objectivo não é a variável (objecto tendo um "nome"). Dado:

bar = foo; foo = null;

foo é agora null eo objeto que foo realizada está agora armazenado como bar.

Você não será capaz de fazer isso. O nome da variável não está vinculado à variável, e eles não estão passados ??entre funções. O melhor que você pode fazer é escrever uma função para tirar uma corda e resolvê-lo de volta para uma variável:

function printVar(name) {
    console.log(name + ": " + window[name]);
}

É claro que há um muito de coisas de errado com isso. Eu recomendo apenas fazer duas chamadas de registro:

console.log("foo");
console.log(foo);

ou, usando a sintaxe de estilo printf:

console.log("foo: %o", foo);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top