10

これを機能させることはできないようです...

特定のリンクを非表示にするページがあります。DOM が読み込まれると、jQuery を使用してそれらの要素の一部を切り替えます。これは、次のようなデータ属性を使用して駆動されます。

<div class="d_btn" data-usr='48'>
  <div class="hidden_button">

次に、コードがあります:

  $.each($(".d_btn"), function() {
     var btn = $(this).data('usr');
   if ( btn == '48' ){      
     $(this).children('.hidden_button').toggle();
   }

上記のすべてが計画どおりに機能します。問題は、if ステートメントが評価されたら、クラス .d_btn から data-usr を削除しようとしていることです。次のことを試してみましたが、何も機能しません (つまり、ページが読み込まれた後、ソースにはまだ data-usr 属性が表示されます:

$(this).removeAttr("data-usr");

$(this).removeData("usr");

私はこれに数時間取り組んでいますが、何もありません! 助けていただければ幸いです。

アップデート

データ属性を空の文字列に設定するという素晴らしい提案を試みましたが、まだ望ましい結果が得られていません。

もう少し説明すると、属性を削除しようとしている理由は、ajax 応答がページに別のアイテムを追加するときに、以前に追加されたアイテムに既にボタンが表示または非表示になっているためです。AJAX 応答時に、DOM が読み込まれると同じ関数を呼び出します。

現在、AJAX 経由で何かが追加されると、すべてのボタンが切り替えられます (非表示のボタンが表示され、その逆も同様です)。

また、私のアプローチに代わるものを試してみたいと思っています。ありがとう!

アップデート

さて、電球が点滅し、.toggle() の代わりに .show() を使用するだけで、やりたいことを実行できます。

とにかく、何かが追加されるたびにページが何百ものアイテムをチェックする可能性があるため、この質問に対する答えを見つけたいと思います - これはひどく非効率的です (コンピューターの場合でも、笑)

4

4 に答える 4

9

removeAttr が機能しない場合は、代わりに値をランダム値または空の変数に設定してみませんか..

$(this).attr("data-usr" , '');

$(this).prop("data-usr" , '');
于 2012-09-20T23:20:11.720 に答える
7

DOM を変更しても、ソースには影響しません。Inspector/Developer Tools で表示できる DOM に影響します。右クリック => ソースを表示すると、JavaScript によって変更された実際の現在のソースではなく、ページの元のソースが表示されます。

于 2012-09-20T23:20:13.487 に答える
2

空白の文字列に設定します。

$(this).attr("data-usr", "");

ソースではなく、DOM をチェックしてください。(Chrome: Ctrl + Shift + i)。

于 2012-09-20T23:20:13.547 に答える
0

他の人が述べたように。ソースを確認すると、Web ページの元の編集されていないソースのみが表示されます。必要なことは、開発者ツールを使用して DOM をチェックすることです。

ここで jsfiddle の Chrome のインスペクターですべてを確認したところ、データと同様に属性が確実に削除されています。

于 2012-09-20T23:46:53.017 に答える