必要なコードだけを実行する方が確実に良いでしょう。それほど難しいことではありません。唯一の小さな複雑さは、あなたの/animals/all
ケースを処理することです。すべてのコードを 1 つのファイルに保持する場合は、次のようにします。
var animals = {
giraffe: function() {
console.log( "I'm a giraffe" );
},
elephant: function() {
console.log( "I'm an elephant" );
},
zebra: function() {
console.log( "I'm a zebra" );
}
};
$(function() {
var animal = location.pathname.split('/').pop();
if( animal == 'all' ) {
for( var animal in animals ) {
animals[animal]();
}
}
else if( animal in animals ) {
animals[animal]();
}
else {
console.log( "I'm a mystery animal" );
}
});
このコードを実際にテストするには、Stack Overflow の次のような URL にアクセスし、そのコードを JavaScript コンソールに貼り付けます。
https://stackoverflow.com/animal/giraffe
https://stackoverflow.com/animal/elephant
https://stackoverflow.com/animal/zebra
https://stackoverflow.com/animal/ocelot
https://stackoverflow.コム/動物/すべて
更新: OK、実際の状況はもう少し複雑であるとコメントで説明しました。誰にとっても役立つ場合に備えて、このコードをここに残しますが、あなたの状況では、既に持っているコードで必要なものに近づくかもしれません.
関係のないページにいるときに動物の機能の 1 つが何をするかという問題については、もちろん、それがどのようにコーディングされているかによって異なります。何もせずに成功するか、エラーが発生する可能性がありますよね?
ここでは jQuery コードについて話しているので、ここにいくつかの例を示します。ID で要素を検索し、その要素が存在すると想定するコードがあるとします。
var zebraElement = $('#zebra')[0];
console.log( zebraElement.value );
要素が存在するページで#zebra
、このコードはそのvalue
属性をログに記録します。(入力要素など、値を持つ要素であると仮定して議論します。)
しかし、#zebra
が存在しない場合はzebraElement
でundefined
あり、そのアクセスを試みるvalue
と失敗し、デバッガーに到達します。
OTOH、次のようにコーディングした場合:
var $zebra = $('#zebra');
console.log( $zebra.val() );
がなくても失敗することはなく、エラーを引き起こすことなく#zebra
正常に印刷されます。undefined
同様に、 を使用するコードがある$().each()
場合、要素が欠落していても通常は失敗せずに実行されます。コールバック関数が実行されないためです。
$('.animal').each( function( i, e ) {
console.log( $(e).val() );
});
が含まれる要素がない場合class="animal"
、console.log()
呼び出しに到達することはありません。したがって、エラーはありません。何もしません。
何をしているかにもよりますが、これは、必要な動作だけを起動するための完全に合理的な方法です。単純に、何もせずに不足している DOM 要素をコードが確実に処理するようにします。
また、より多くの洞察については、必ずニックの回答を読んでください。
body
そしてもう 1 つ更新があります... コメントで、要素のクラス名をキーオフすると述べました。これを行う良い方法は、上記のコード例に似ています。動物ごとに条件は必要ありません。ループと単一の条件だけです。
var animals = {
giraffe: function() {
console.log( "I'm a giraffe" );
},
elephant: function() {
console.log( "I'm an elephant" );
},
zebra: function() {
console.log( "I'm a zebra" );
}
};
$(function() {
var $body = $('body');
for( var animal in animals ) {
if( $body.hasClass(animal) ) {
animals[animal]();
}
}
});
したがって、たとえば、および関数<body class="giraffe zebra">
を呼び出す場合があります。animals.giraffe()
animals.zebra()