2

私はjQueryを使い始めたばかりで、とても興奮しています。

投稿する理由は、必要なタスクを実行する jQuery をいくつか作成したためですが、エレガンスに少し欠けているのではないかと疑っています...

次のすべてのテーブル行を取得しようとしています: 1) 'item' のクラス 2)​​ 値を持つ子テキスト入力ボックス

HTML:

<tr class="item">
    <td class="sku">[dynamic]</td>
    <td class="quantity">
        <input type="text" name="[dynamic]" maxlength="3" /></td>
</tr>

jQuery

...
var selections=$(".item>.quantity>:text[value!='']").parent().parent();
...

上に投稿したコードは機能しますが、(少なくとも?) 少し変な匂いがすることが 2 つあります。

コードの匂い #1: 行全体を取得するために最後に '.parent().parent()' を使用しています。最後に階層を遡る代わりに、「子テキスト入力に値がある 'item' のクラスを持つすべての tr を教えてください」と言う方法はありますか?

コードのにおい #2: 空白がコンテンツとして解釈されないようにするために、選択中にテキスト入力の値を「トリミング」する方法がわかりません。現在の方法では、.each ループ中に「トリム」して再度チェックする必要があり、これは冗長に思えます。

「より良い方法」があれば教えてください。

ありがとう、リチャード

4

2 に答える 2

5

#1

代わりにこれを使用してください(hasセレクターに注意してください):

var selections=$(".item:has(>.quantity>:text[value!=''])");

#2

通常、スペースは有効な入力と見なされるため、アプリケーションで特にスペースが必要な場合は、 を使用してループでフィルタリングしても問題ありません$.trim()

于 2009-04-20T20:57:06.373 に答える
2

これを意図的に行っているかどうかはわかりませんが、各子を入力までトラバースする必要はありません。そうする理由がない限り、これは同じくらい良いです:

var rows = $('tr.item:has(input:text[value!=''])');

また、 jQuery のドキュメントでは、それを省略することは非常に遅いセレクターであることに等しいため、序文:textに を付けることを提案していることにも注意してください。input*:text

于 2009-04-20T21:11:37.947 に答える