2

次の構造:

<label class="selectit">
    <input value="3" type="checkbox" name="tax_input[event_type][]" id="in-event_type-3">
     Workshops
</label>

チェックボックスがチェックされているかどうかを簡単に確認できます…</p>

if ( $('#in-event_type-3').attr('checked') ) {

チェックボックスを選択するために「ワークショップ」に入れることができるセレクターを使用する方法もありますか? 問題はid、チェックボックスが動的に生成され、時々変化することです。ただし、labelテキスト「ワークショップ」は私が設定したもので、この「ワークショップ」文字列を使用してチェックボックスを選択するセレクターを何らかの方法で作成できるのでしょうか?

それに関するアイデアはありますか?

4

6 に答える 6

6

:containsセレクターを試してください:

$(".selectit:contains('Workshops')").find(":checkbox").prop('checked');
于 2012-04-12T13:47:03.767 に答える
1

ラベルに for 属性を付けます。

<label class="selectit" for="in-event_type-3">

編集: 申し訳ありませんが、ID が時々変更されることに気づきませんでした。jQuery を配置して入力を見つけ、for を割り当てることもできます。このような:

$('input').each( function() {
    $(this).parent().attr('for', $(this).attr('id') );
});
于 2012-04-12T13:48:54.493 に答える
1

クラスを追加することは不可能ですか?

選択しやすくなった後ですか?

if($('.Workshops').is(':checked'))
于 2012-04-12T13:49:18.770 に答える
0

ですから、他の誰もがクラスを使用するように言っています - 彼らの言うことを聞いてください! それははるかに簡単です!

ただし、HTML コンテンツを変更できない場合もあります。その場合、対応するチェックボックスを見つけるために、ラベル要素内に含まれるすべてのテキストを調べる必要があります。

var selectedCheckboxes = [];
$.each($("#container > label"),function(index,elem){
  var labelText = $(elem).text();
  var testString = "Workshops";
  if (labelText.match(testString)){
    selectedCheckboxes = $(elem).find("input[type='checkbox']:checked");
  }
});

このソリューションは、あなたが示した単純な例で機能することを警告する必要がありますが、マークアップがもう少し複雑な場合 (独自のテキスト コンテンツを持つ追加の子要素など)、このメソッドは ALOT を大きくし、ALOT をより複雑にする必要があります。 .

HTML マークアップ内の要素のテキスト コンテンツに一致する組み込みのセレクターはありません。要素のテキスト コンテンツは、データまたは情報の視覚的表現のみであるべきです。ID 情報を含めるべきではありません。要素とセットがその兄弟または子孫から離れていることを識別するために、属性idclass属性を使用します。使用できるものは他にもありますが、これらは基本的な構成要素です。

ここで注意すべきことの 1 つは、jQuery の.text()関数の動作です。そうなる :

子孫を含む、一致した要素のセット内の各要素の結合されたテキスト コンテンツを取得します。

強調を追加

:contains()セレクターは子孫に関して同様の動作をしており、以前の回答で既に説明されています。

この制限のより実践的で視覚的な例に...

この最小限の HTML スニペットを考えると:

<div id="matt">
  One
  <span>Two</span>
  <div> 
     <label>Three</label>
  </div>
  Four
</div>

を呼び出すと、次のように$("#matt").text()なります。

一二三四

すべての子孫のテキスト コンテンツも含まれています...

于 2012-04-12T14:03:10.277 に答える
0
var element = $('input').filter(function() {
    return $.trim($(this).parent('label').text())=='Workshops'?$(this):null;
});

var isChecked = $(element).attr('checked'); //true-false
于 2012-04-12T14:13:21.860 に答える
0

入力を制御してクラスを配置できる場合(「ワークショップ」と呼びましょう)、次のようになります。

$(".workshop").attr("checked", "checked");
于 2012-04-12T13:54:02.110 に答える