0

jQuery noob ここでは、行の背景色を交互に生成しようとしています。これは HTML で機能します。

<script type="text/javascript">
            $(document).ready(function() {
                   $('.stripedtable tr:even td').addClass(" evenrow");
                    alert("Just executed stripedtable jQuery in MasterPage");
            });
</script>

"evenrow" クラスが のクラスに追加され、偶数行のみが対象になります。すごい!

ASP.NET MasterPage に配置する場合を除いて、「evenrow」クラスは追加されません。FireBug では、関数が実行されていることと、jQuery があることを確認します。はalert()、ページが読み込まれた後にメソッドが起動していることを示します。ただし、「偶数行」クラスはなく、ストライプもありません。

私が望むように変更されていないテーブルが、MasterPage から継承するページの UserControl によって生成されることはおそらく関連があります。

これは奇妙です。[ソースの表示] に移動し、ソース全体を NoStripes.html にコピーして、ブラウザーで HTML ページを開くと、"evenrow" クラスとストライプが表示されます。jQuery は正常に動作します。

これは、MasterPage からメソッドが起動されたときに、(どういうわけか) HTML が実際には存在しないことを意味しているようです。jQuery はそれを変更できないのでしょうか?! 生成されたソースを保存したので、HTML は NoStripes.html と共にありますか?!

UserControl のコンテンツ プレースホルダーに $('.stripedtable など) を配置してみました。はalert()発射を示しています。ストライプはありません。

提案?私は解決策を見つけることなく、長々とググりました。それはおそらく単純なことですが、私には理解できません。

TIA - ホイスター

4

7 に答える 7

1

.stripedtable tr:even td.NETは、セレクターを役に立たなくするテーブルを使って何かをするに違いありません。ファイアバグを使用しているとおっしゃっていましたが、セレクターをいじることをお勧めします($(".stripedtable tr:even td")コンソールで試して、何が選択されるかを確認してください)。必要な要素が得られない場合は、.stripedtableパーツなしで試してください。

于 2009-09-25T19:35:18.683 に答える
1

.css( "font-weight"、 "bold");など、クラスの代わりにcssスタイルを追加してみてください。代わりにスタイルシートの問題があるかどうかを確認する

于 2009-09-25T19:29:20.337 に答える
0

タイトルを読んだときに最初に考えたのは、ASP.NETがユーザーコントロール内にあるときにフィールドに動的に名前を付ける方法です。そして、「#mytable」のようなIDを参照している可能性があると思いましたが、このIDは「#mycontrol_mytable」に名前が変更されています。しかし、クラス名を参照しているので、それはできません。

あなたに影響を与えているかもしれない他の頭に浮かぶことは、Doctypeです。doctypeは、時々(特にIEで)いくつかの奇抜なことに影響を与える傾向があります。ASPXファイルで使用しているDoctypeがHTMLファイルと同じであることを確認しましたか?

StackOverflowのようなDoctypeを試すことができます:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
于 2009-09-25T19:33:11.450 に答える
0

テーブルがページに読み込まれる前に、jQueryスクリプトが実際に実行されている可能性があります。マスターページの下部にスクリプトを追加するか、マスターページのコードビハインドからスクリプトの登録メソッドを使用して、それが最後にロードされることを確認することもできます。

jqueryスクリプトを添付しようとしているテーブルのマークアップも投稿することもできます。スティッピングが適用されない原因となっている何か不思議なことがあるかもしれません。

編集私はあなたのjqueryに行って遊んで、簡単なマスターページ、子ページの例を一緒に投げました、そしてこれは私が思いついたものです。マスターページの先頭で次のスクリプトを使用します。

    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>

<script type="text/javascript">
$(document).ready(function() {
    $('.stripedtable tr:even').addClass("evenrow");
    alert("Just executed stripedtable jQuery in MasterPage");
});

次に、スタイルシートに次の定義を配置しました。

tr.evenrow td {background: Red;} 

次に、コントロールを作成し、テーブル要素にクラス名を付けて、次のような単純なテーブルに入れました。

<table class="stripedtable"><tr><td></td></tr></table>

私がページを実行したとき、すべてが私のために働いた。問題は、jqueryコードで、必要なレベルより1レベル低くなっていることだと思います。必要なのは、テーブル、行、そして:evenマーカーの順です。あなたが本当に必要だとは思わないtd要素に投げ込まれたあなたのサンプルコード。

これがあなたのために働くことを願っています。

于 2009-09-25T19:25:35.380 に答える
0

疑わしい場合は、デバッガー ブレークポイントを設定し、コードをステップ実行します。基本的なアドバイスですが、問題を見つけるのに役立ちます。「デバッガー」を入れてください。ドキュメントの準備ができたコードに追加し、セレクターを個別の var 割り当てとして分割して、a) コードがまったく起動するかどうか、b) 何かを選択しているかどうか (長さは > 0 にする必要があります) を確認できるようにします。何も選択できない場合は、インタラクティブな FireBug コンソール (または IE のウォッチ式) を試して、正しいセレクターが見つかるまでセレクターを入力してください。

レンダリングされた HTML ドキュメントの出力に期待どおりに CssClass .stripedtable が存在するかどうかを確認することもできます。

于 2009-09-25T19:39:57.100 に答える
0

最初に最終結果の HTML を検証してください。以前よりもはるかに優れていますが、以前は、.net コントロールは、DOM のトラバースを台無しにする可能性のある無効なマークアップを吐き出すことで有名でした。

于 2009-09-25T20:09:15.750 に答える
0

どうもありがとうございました。初心者にとって、すべての答えは役に立ちました。.css() の追加は巧妙でした。<tr>s ではなく s に作用するように、提供された JavaScript を適用しました<td>。突破口となったのは、私が使ったことのない FireBug コンソールの提案でした。セレクターの結果を確認する方法を探していましたが、それがすべての違いを生みました。FireBugは素晴らしいです。

これが私たちが学ぶ方法です。残念すぎて辛いです。

問題は大文字と小文字の区別でした。私の ASP.NET マークアップでは、私の CssClass は "StripedTable" で、私の jQuery 式は "stripedtable" を探していました。JavaScript では大文字と小文字が区別されないことはわかっていましたが、STRINGS は大文字と小文字が区別されます。ああ。

ちなみに、私はレベルに行く必要があり<td>ます。なぜなら、私の前任者はレベルでスタイルを適用し、背景色を含むことが多いため<td>です。そのため、特定性の戦いに勝つためにクラスを変更する必要がありました。

$('.stripedtable tr:even td').addClass(" evenrow");のクラスを "CellStyleLeft" から "CellStyleLeft evenrow" に変更します。そして、evenrow が最後に来るので、それが勝ちます!

最後に、それは機能します。みんな、ありがとう!

-- ホイスター

于 2009-09-28T21:41:59.337 に答える