document.all vs document.getElementById
-
18-09-2019 - |
Pergunta
Quando você deve usar document.all
vs. document.getElementById
?
Solução
document.all
é uma extensão proprietária da Microsoft para o padrão W3C.
getElementById()
é padrão -. Uso que
No entanto, considerar se usando uma biblioteca js como jQuery viria a calhar. Por exemplo, $("#id")
é o equivalente jQuery para getElementById()
. Além disso, você pode usar mais de seletores apenas CSS3 .
Outras dicas
document.all
é muito de idade, você não tem que usá-lo mais .
Para citar Nicholas Zákas :
Por exemplo, quando o DOM era jovem, nem todos os navegadores suportados getElementById (), e por isso não era um monte de código que ficou assim:
if(document.getElementById){ //DOM
element = document.getElementById(id);
} else if (document.all) { //IE
element = document.all[id];
} else if (document.layers){ //Netscape < 6
element = document.layers[id];
}
Na verdade, document.all
apenas minimamente comparável ao document.getElementById
. Você não usaria um no lugar do outro, eles não retornam as mesmas coisas.
Se você estava tentando filtro através de recursos do navegador que você poderia usá-los como resposta de Marcel Korpel assim:
if(document.getElementById){ //DOM
element = document.getElementById(id);
} else if (document.all) { //IE
element = document.all[id];
} else if (document.layers){ //Netscape < 6
element = document.layers[id];
}
Mas, funcionalmente, document.getElementsByTagName('*')
é mais equivalente a document.all
.
Por exemplo, se você estava indo realmente para uso document.all
para examinar todos os elementos em uma página, como este:
var j = document.all.length;
for(var i = 0; i < j; i++){
alert("Page element["+i+"] has tagName:"+document.all(i).tagName);
}
você usaria document.getElementsByTagName('*')
em vez disso:
var k = document.getElementsByTagName("*");
var j = k.length;
for (var i = 0; i < j; i++){
alert("Page element["+i+"] has tagName:"+k[i].tagName);
}
document.all () é uma forma não-padrão de acessar elementos DOM. Tem sido obsoleto de alguns browsers. Dá-lhe acesso a todos os elementos sub em seu documento.
Se você tem:
<div id="testing"></div>
Usando
document.getElementById("testing");
Terá acesso a essa div específico.
document.querySelectorAll
(e sua variante document.querySelector()
que retorna o primeiro elemento encontrado) é muito, muito mais poderoso. Você pode facilmente:
- começar uma coleção inteira com
document.querySelectorAll("*")
, emulando efetivamente propriedadedocument.all
não-padrão; - uso
document.querySelector("#your-id")
, emulando efetivamente funçãodocument.getElementById()
; - uso
document.querySelectorAll(".your-class")
, emulando efetivamente funçãodocument.getElementsByClassName()
; - uso
document.querySelectorAll("form")
vez dedocument.forms
edocument.querySelectorAll("a")
vez dedocument.links
; - e executar qualquer muito mais complexa consulta DOM (usando qualquer seletor CSS disponível) que simplesmente não podem ser cobertos com outros builtins documentos.
Unificação API consulta é o caminho a percorrer. Mesmo se document.all
seria no padrão, é apenas inconveniente.
Especificamente, document.all
foi introduzido para IE4 ANTES document.getElementById
tinha sido introduzido.
Assim, a presença de meios document.all
que o código se destina para apoiar IE4 , ou está tentando identificar o navegador como IE4 (embora pudesse ter sido Opera), ou a pessoa que escreveu ( ou copiado e colado) o código não estava na mais recente.
No caso altamente improvável que você precisa para apoiar IE4, então, você precisa document.all
(ou uma biblioteca que lida com esses antiga IE especificações).
De acordo com o arquivado Internet Explorer Dev Center da Microsoft, document.all
está obsoleta no IE 11 e Edge!
document.all
funciona em Chrome agora (não tenho certeza quando uma vez), mas faltou-lo nos últimos 20 anos .... Simplesmente um nome de método mais curto que o document.getElementById
desajeitado. Não tenho certeza se ele funciona no Firefox, esses caras nunca teve nenhum desejo de ser compatível com a web existente, sempre criando novos padrões em vez de abraçar a web existente.