1

関数からオブジェクトを返して smalls 変数に代入しようとすると、長さが 0 として返されるため、変数 smalls は空になります。

var smalls = function(){
        var table = $("#box-table-a");
        return table.find("small");
    }, smallContent;
    for(var i = 0; i<smalls.length; i++){
        smallContent = smalls[i].innerHTML;
        smalls[i].parentElement.className += "relative";
        smalls[i].className += "form-absolute-right";
        smalls[i].innerHTML = "<span class='bubble'>" + smallContent + "<span>";
    }

これは機能し、可変スモールは望ましい長さです。

    var table = $("#box-table-a");
    var smalls = table.find("small");       //fetch the tr's with <small> tag
    var smallContent;
    for(var i = 0; i<smalls.length; i++){
        smallContent = smalls[i].innerHTML;
        smalls[i].parentElement.className += "relative";
        smalls[i].className += "form-absolute-right";
        smalls[i].innerHTML = "<span class='bubble'>" + smallContent + "<span>";
    }

私がJavascriptについて持っている知識から、関数を変数に割り当てることができます。私は何を間違っていますか?

4

4 に答える 4

3

smallsここで実行するのを忘れました

var smalls = function(){
        var table = $("#box-table-a");
        return table.find("small");
    }, smallContent;
    for(var i = 0; i<smalls.length; i++)
//                   ^smalls is a function pointer

var smalls = function(){
            var table = $("#box-table-a");
            return table.find("small");
        }(), smallContent;
//       ^execute the function
        for(var i = 0; i<smalls.length; i++)
//                       ^smalls is a nodeList
于 2012-07-27T10:56:20.790 に答える
2

これは、関数を割り当てるだけでなく、実際に関数を実行する必要があるためです。関数の割り当てを自己実行型の無名関数に変更すると、これでうまくいくはずです。

var smalls = (function(){
    var table = $("#box-table-a");
    return table.find("small");
})(), smallContent;
于 2012-07-27T10:54:52.523 に答える
2

他の人が述べたように、実行の結果ではなく、関数参照をループしますsmalls

それでも、jQuery を使用すると、より短く単純なコードを記述できます。

var smalls = $("#box-table-a").find("small"); // this var really contains the elements
smalls.addClass("form-absolute-right").wrapInner("<span class='bubble' />");
smalls.parent().addClass("relative");

これにはさまざまな利点があります。

  • クラスは単にリストに追加されるだけで、空白について心配する必要はありません。
  • wrapInner は、HTML 文字列をいじる代わりに、DOM を (すべてのリスナーなどで) 保持します。
  • メソッドをトラバースするparent()はセットを一意にするため、複数の要素を持つ要素はtable-box1つのクラスのみを取得します
  • ループはまったく必要ありません。セット内のすべてのアイテムに対して jQuery メソッドが実行されます。
于 2012-07-27T11:12:43.433 に答える
0

試す

var smalls = function(){
    var table = $("#box-table-a");
    return table.find("small");
}, smallContent;
for(var i = 0; i<smalls().length; i++){
    smallContent = smalls()[i].innerHTML;
    smalls()[i].parentElement.className += "relative";
    smalls()[i].className += "form-absolute-right";
    smalls()[i].innerHTML = "<span class='bubble'>" + smallContent + "<span>";
}

return は、関数全体を呼び出さずに呼び出されることはないためです。

ところで:

$('#box-table-a .small')
    .toggleClass('form-absolute-right',true)
    .wrap('<span class="bouble" />')
    .parent()
    .toggleClass('relative',tru);

さらに良いかもしれません。

于 2012-07-27T10:54:42.460 に答える