質問: 'lcSwitchEffect' + lcSwitchN; jQuery(lcSwitch).find('.' + lcSwitchEffectN).each(function() { if(jQuery(this).show()) { jQuery('[class*=lcSwitchEffect]').hide(); } else { jQuery('[class*=lcSwitchEffect]').show(); } }); jQuery(this).on('click', function() { jQuery(lcSwitch).find('.' + lcSwitchEffectN).toggle(); return false; }); }); }); ``` 私的に検証した結果では、下記部分にてエラーが生じているようです。 each前で取得しているものが、IE10と、その他ブラウザで異なっているようなのですが、解決方法が分かりません。。 ``` jQuery(lcSwitch).find('.' + lcSwitchEffectN).each(function() { if(jQuery(this).show()) { jQuery('[class*=lcSwitchEffect]').hide(); } else { jQuery('[class*=lcSwitchEffect]').show(); } }); ``` どうぞ、宜しくお願い致します。
回答: Chorome, Firefox, IE11では発生しなかったので環境依存かと思います。 IE10の環境がないため検証できませんでしたが、考えられるとすると`lcSwitch`がjQueryオブジェクトのため`jQuery(lcSwitch)`でエラーになっているのかもしれません。 以下のように変えるとどうでしょう? ``` - jQuery(lcSwitch).find('.' + lcSwitchEffectN).each(function() { + lcSwitch.find('.' + lcSwitchEffectN).each(function() { ``` `if(jQuery(this).show())` この記述ですが、show()の戻り値を見る意味はないように思います。 jQueryオブジェクトが返るので、つねに真になります。 要件の認識があいまいですが、少し書き直してみました。 ``` jQuery('.lcSwitch').each(function() { var $lcSwitch = jQuery(this); $lcSwitch.find('[class*=lcSwitchEffect]').show(); $lcSwitch.find('.lcSwitchCause').each(function() { var lcSwitchN = jQuery(this).attr('data-lcSwitch'); var lcSwitchEffectN = 'lcSwitchEffect' + lcSwitchN; $lcSwitch.find('.' + lcSwitchEffectN).each(function() { jQuery(this).hide(); // 一致したものだけ隠す? }); jQuery(this).on('click', function() { $lcSwitch.find('.' + lcSwitchEffectN).toggle(); return false; }); }); }); ```