PrototypeJS Element.prototype.appendChild issue



由于Ajax加载的内容,我不得不更改一个函数:

document.observe('dom:loaded',function() {    
    $$('.userListHeaderCell').invoke('observe', 'click', function() {       
        this.toggleClassName('desc');        
        var colnumber = this.up().childElements().indexOf(this);        
        var content = this.up(2); 
        sortColumn(content, colnumber, this.hasClassName('desc'));    
    });
});

:

document.observe('click', function(e, el) {  
    if (el = e.findElement('.userListHeaderCell.sortable')) { 
        el.toggleClassName('desc');        
        var colnumber = el.up().childElements().indexOf(el);        
        var content = el.up(2); 
        sortColumn(content, colnumber, el.hasClassName('desc'));   
    }
});

sortColumn看起来像:

function sortColumn(content, colnumber, desc) {    
    content.select('.userListRow').sort(function(a,b){        
        var atext = a.down(colnumber).innerHTML.stripTags().toLowerCase();        
        var btext = b.down(colnumber).innerHTML.stripTags().toLowerCase();        
        return atext.localeCompare(btext) * (desc ? -1 : 1);    
    }).each(Element.prototype.appendChild, content);
}

切换和colnumber工作和内容是一个对象HTMLDivElement,但似乎我需要转换内容变量或使用另一个函数,但不确定在sortColumn。我得到的错误是:

"无法转换JavaScript参数" nsresult: "0x80570009 (NS_ERROR_XPC_BAD_CONVERT_JS)" location: "JS frame:: https://www.someurl.com/scripts/prototype.js:::: line 804" data: no]

我需要改变什么才能使它工作?

谢谢。

编辑:

IE错误显示:无法获取属性'call'的值:对象为空或未定义prototype.js,第804行字符9

我认为问题出在Element.prototype.appendChild

尝试添加Element.extend(content),但似乎没有帮助。

示例数据:

<div id="contentbox_Users" class="userList">
    <div class="userListHeader">
        <div class="userListHeaderCell col1 sortable">First Name</div>
        <div class="userListHeaderCell col2 sortable">Last Name</div>
    </div>
    <div id="contentbox_People">
        <div class="userListRow">
            <div class="userListCell col1">John</div>
            <div class="userListCell col2">Smith</div>
        </div>
        <div class="userListRow">
            <div class="userListCell col1">Bob</div>
            <div class="userListCell col2">Ray</div>
        </div>
        <div class="userListRow">
            <div class="userListCell col1">Fred</div>
            <div class="userListCell col2">Jones</div>
        </div>
    </div>
</div>

既然是我的代码失败了,我应该试一试。

,

}).each(Element.prototype.appendChild, content);

的简写方式
}).each(function(row) {
    content.appendChild(row);
});

你可以试试那样做,看看情况是否更好。我不认识这个错误,但快速谷歌表明它来自Firefox,涉及传递一个非元素到一个本机函数,期望一个。在这种情况下,我倾向于到处粘贴大量的console.log(...)调用(并在Firefox中按F12),看看会发生什么。记录数组应该将所有行显示为HTML元素。

最新更新