0

私はjQueryを学んでいて、before機能に問題があります。私がやっていることは、クラスを持つテーブルがあり、fishそれdetachを削除して配列に入れ、ボタンを押すと元の場所に復元されるようにすることです。これが私が下に持っているものです。私が達成しようとしている最終結果は、テキスト(パンフライオヒョウ)をテーブルに戻すことです。どんな助けでも大歓迎です

<table>
    <tr>
        <td>&nbsp;</td>
        <td class="fish">Pan-Fried Halibut</td>
        <td>&nbsp;</td>
    </tr>
</table>

jQuery デタッチ関数は次のとおりです。

$("input#btn1").click(function () {
    $f = $(".fish").detach();
});

テキストを元に戻そうとしています:

$("input#btn2").click(function () { 
    $(".fish").first().before($f);  'This statement doesnt work; what am i doing wrong
});                            
4

3 に答える 3

0

ここで何をしようとしているのかは明確ではありません。

1 つの問題は、$(".fish").detach()クラス fish を持つ要素を実行しないと、DOM ツリーに残ることです。したがって、後で行うと$(".fish")何も一致しないため、何も挿入されません。

もう 1 つの問題は、両方のclickハンドラーを同じ要素にアタッチしているように見えることです。ボタンがクリックされると両方が呼び出され、最終結果がどうなるかは明らかではありません。

$f最後に、最初のイベント ハンドラーから 2 番目のイベント ハンドラーにどのように渡されますか?

このようにすると、何らかの結果が表示されます (おそらく意図したものではありません)。

$(function() {
    var $f; // so that it's accessible to both event handlers

    // bind two handlers to the click event, to be executed on alternating clicks
    $("input#btn1").toggle(function () {
        $f = $(".fish").detach();
    }, function() {
        // you need to find some appropriate selector here, $(".fish")
        // will match nothing because those elements have already been detached
        $(/*something*/).first().before($f);  
    });
});
于 2012-05-01T13:37:13.063 に答える
0

$fテキストを追加しようとしているときに、変数がまだスコープ内にあるとは思いません。代わりに、次のようなものを試してください。

$("input#btn1").click(function(){
    var $f = $(".fish").first();
    $(".fish").before($f);
});
于 2012-05-01T13:39:27.273 に答える
0

.fish を切り離すと、そこにはありません。したがって、それを参照して元に戻そうとすることはできません。別の場所を指定して元に戻してください。この例を見てみてください - http://jsfiddle.net/mnNfH/

于 2012-05-01T13:44:23.237 に答える