2017-07-09 6 views
1

data-id属性を持つアンカータグから最も近いdivにアクセスしようとしています。親divのデータ属性値をjQueryでいくつかのレベルを調べる

.parent().parent().parent()が動作しますが、実際にはそのことを避けるようにしています。

<div class="panel panel-default" data-id="@customer.Id"> 
     <div class="panel-heading clearfix"> 
      @customer.Name 
      <div class="pull-right"> 
       <a class="btn btn-sm btn-default js-deleteCustomer" href="#" title="Delete"> 
        <i class="fa fa-trash" aria-hidden="true"></i> 
       </a> 
     </div> 
</div> 

私は次のことを試してみました:

var customerId = $(this).closest("div:has(*[data-id])").attr('data-id'); 

答えて

3

あなたは

var customerId = $(this).closest("div[data-id]").attr('data-id'); 

:has(*[data-id])は、その属性を持つ要素と一致していませんします。 にその属性の別の要素が含まれている要素と一致します。一致した要素にはおそらく同じ属性がありません。なぜ:has(*[data-id])が機能しないのかを説明します。例えば、それは、次に、外側のdivはなく、内側のdivに一致し:

<div> 
    <div data-id="@customer.Id"></div> 
</div> 

単に:has()を使用せずに直接属性セレクタを取り付け、属性を持つ要素にマッチします。

+0

これは完璧に機能しました。あなたが言ったように.data()と.attr()はどちらも動作します。唯一の違いは.data()は実際の数値を返し、.attrはそれを文字列として返します。 –

+0

@Blake Rivell:ああ、十分です。 .data()は型変換を行うのを忘れていました。 – BoltClock

+0

実際に私の主な問題は、実際のコードではdata-idの代わりにdata-customerIdという名前を使用していたことです。大文字はデータ属性では機能しません。あなたはこれを知っていましたか? –

関連する問題