あなたはjqueryをロードしたと言うので..
おそらく、onclick セッター (jquery コード) は、ドキュメントが読み込まれる前に実行されます (そのため、その時点で document.body に要素はありません)。
jsfiddle ('No-Library' 純粋な JS) では、コードは (デフォルトで) 次のようにラップされます。
window.onload=function(){
// your code here
};
これでうまくいくはずです。
これは、「フレームワークと拡張機能」の下の左側のオプション パネルで (デフォルト) オプション「onLoad」を選択したときに jsfiddle が行うことです。
「onDomready」を選択すると、コードは(現在)次のように という関数にラップされますVanillaRunOnDomReady
。
var VanillaRunOnDomReady = function() {
// your code here
}
var alreadyrunflag = 0;
if (document.addEventListener)
document.addEventListener("DOMContentLoaded", function(){
alreadyrunflag=1;
VanillaRunOnDomReady();
}, false);
else if (document.all && !window.opera) {
document.write('<script type="text/javascript" id="contentloadtag" defer="defer" src="javascript:void(0)"><\/script>');
var contentloadtag = document.getElementById("contentloadtag")
contentloadtag.onreadystatechange=function(){
if (this.readyState=="complete"){
alreadyrunflag=1;
VanillaRunOnDomReady();
}
}
}
window.onload = function(){
setTimeout("if (!alreadyrunflag){VanillaRunOnDomReady}", 0);
}
これは、最終的には「onLoad」オプションのようなものになる ことに注意してください。window.onload
ライブラリ JQuery 1.9.1 をロードすると、状況が (少し) 変わります。
オプション「onLoad」は、次のようにコードをラップします。
$(window).load(function(){
// your code here
});
これは基本的に、この回答の最初のオプションと同じですが、JQuery の方法であることに注意してください。
オプション「onDomready」を選択した場合 (JQuery ライブラリが JSFiddle にロードされている間)、コードは次のようにラップされます。
$(function(){
// your code here
});
以下のコメントで ErikE が指摘したように、すでに JQuery を読み込んで使用しているため、さらに別の JQuery の方法を使用することもできます。
$(document).ready(function() {
// your code here
});
最後に、ErikE があなたの質問に対するコメントで指摘したように (私が見落としていた深刻な問題)、id
は一意であることを意図しています。両方の段落にID「トグル」を与えたのに対し。
代わりに、それらにclass
「トグル」を与え、クラスごとに要素を選択して、onclick 関数を割り当てる必要があります。