特定の位置に配置された文console.log(document.getElementsByClassName("buttonQ")[0]);
は正常に実行されますが、別の特定の位置に配置されたときは同じステートメントが実行されます。異なる位置のnode.getElementsByClassNameの異なる動作
whats going on here ??両方の位置で
ステートメントは、他の文は、文書の読み込みが完了しているされる前にしながら、あなたは、ドキュメントの負荷にMakeRequest
を呼び出しているコードにコメントを経由して
//quotes
(function(){
window.addEventListener("load", makeRequest);
function makeRequest(){
//-----the below statement "console.log" executes succesfully----
console.log(document.getElementsByClassName("buttonQ")[0]);
document.getElementsByClassName("buttonQ")[0].addEventListener("click", makeRequest);
function reqListener() {
if(httpR.readyState === XMLHttpRequest.DONE) {
var quote;
if(httpR.status === 200) {
quote = JSON.parse(httpR.responseText);
document.getElementsByClassName("quote")[0].innerHTML = quote[0].body;
} else {
alert("There was a problem with the request!")
}
}
}
var httpR;
httpR = new XMLHttpRequest();
httpR.onreadystatechange = reqListener
httpR.open("GET", "https://quote-api.glitch.me/pull/1", true);
httpR.send();
}
//----------------------tweet-------------------
//------the below statement "console.log" gives the result "undefined"----
console.log(document.getElementsByClassName("buttonQ")[0]);
//document.getElementsByClassName("buttonT")[0].addEventListener("click", tweetEvent);
function tweetEvent() {
document.getElementsByClassName("quote")[0].normalize();
var tweetToShare = document.getElementsByClassName("quote")[0].childNodes[0].nodeValue;
var urlForTweetButton = document.getElementsByClassName("twitter-share-button")[0].getAttribute("href");
urlForTweetButton = urlForTweetButton + "?hashtags=quotes&text=" + encodeURIComponent(tweetToShare);
}
})();
最初のconsole.logは、ウィンドウが読み込まれた後に実行されます。ウィンドウがロードされる前に2番目のステートメントが実行されます。それであなたは未定義になっています –
'makerequest'関数は、ページがロードされ、DOMモデルが準備された後に実行されます。 2番目のステートメントも下に置かれますが、初期の 'readystate'フェーズで実行されるため、DOMモデルには要素は添付されません。あるいは、 'div'ブロックの直後にスクリプトを置くことができるので、反応レンダラーのルート要素のように見つけられます。 –