満足のいく解決策を思いつくのに苦労しています。
私はいくつかの複合コンポーネントを扱っていますが、それらを完全に制御することはできません。今では を使用してそれらに値を設定する必要JavaScript
がありJQuery
ます。
何が起こるかというと、コンポーネントのHTML
出力はこれに似た構造を持つということです:
<span id="externalSpan">
<span id="internalSpan">
<input type="text" class="component-value" />
</span>
</span>
入力をチェックして、component-value
空の場合はデフォルト値を設定するだけで済みました。
私はこのようにそれを解決しました:
$(document).ready(function(){
var defaultValue = $('#defaultValue').val();
$('.component-value').each(function(){
if(!$(this).val()){
$(this).val(defaultValue);
}
});
});
これで問題なく動作しましたが、評価する必要がある新しい状態があります。コンポーネントにmanualInput
CSS クラスがある場合、その値を設定することはできませんが、クラスはexternalSpan
入力の祖父コンポーネントに設定されており、次のようになります。
<span id="externalSpan" class="manualInput">
<span id="internalSpan">
<input type="text" class="component-value" />
</span>
</span>
私が見つけた最も簡単な方法はこれでした:
if(!$(this).parent().parent().hasClass('manualInput')){ ... }
そしてそれは機能しますが、私には本当に臭いようです。別の解決策はparents()
、クラスセレクターで呼び出して をチェックするlength
ことでしたが、それも奇妙に思えます。
これを行うためのよりクリーンな方法はありますか?そうでない場合、上記の 2 つのオプションのうち、どちらがより良い解決策ですか?