Javascript set Expression对我来说是最大的问题。任何克服这一点的解决方案

时间:2010-09-16 08:29:20

标签: javascript asp.net jquery css internet-explorer

我正在尝试冻结我最近2天的gridview标题,并在Stackoverflow和google搜索中获得了this链接以及许多其他链接。当我在IE 6,7和IE8的兼容模式下使用它时,这很好用,但在正常模式下,这段代码无效。

这一行给了我一个错误。我想实现这个功能。

trs[x].style.setExpression("top",  "this.parentElement.parentElement.parentElement.scrollTop + 'px'");

在阅读评论时,我发现scrollableTable.js使用的是已在IE8中折旧的setExpression方法。

以前我对这个问题一无所知。我希望有一些替代setExpression方法。

如何将setExpression方法替换为此代码中的其他替代方法

function ScrollableTable(tableEl,tableHeight,tableWidth){

this.initIEengine = function() {

    this.containerEl.style.overflowY = 'auto';
    if (this.tableEl.parentElement.clientHeight - this.tableEl.offsetHeight < 0) {
        this.tableEl.style.width = this.newWidth - this.scrollWidth + 'px';
    } else {
        this.containerEl.style.overflowY = 'hidden';
        this.tableEl.style.width = this.newWidth + 'px';
    }

    if (this.thead) {
        var trs = this.thead.getElementsByTagName('tr');
        for (x = 0; x < trs.length; x++) {
            trs[x].style.position = 'relative';
            trs[x].style.setExpression("top", "this.parentElement.parentElement.parentElement.scrollTop + 'px'");
        }
    }

    if (this.tfoot) {
        var trs = this.tfoot.getElementsByTagName('tr');
        for (x = 0; x < trs.length; x++) {
            trs[x].style.position = 'relative';
            trs[x].style.setExpression("bottom", "(this.parentElement.parentElement.offsetHeight - this.parentElement.parentElement.parentElement.clientHeight - this.parentElement.parentElement.parentElement.scrollTop) + 'px'");
        }
    }
    eval("window.attachEvent('onresize', function () { document.getElementById('" + this.tableEl.id + "').style.visibility = 'hidden'; document.getElementById('" + this.tableEl.id + "').style.visibility = 'visible'; } )");
};

3 个答案:

答案 0 :(得分:2)

试试这个:

for (x=0; x < trs.length; x++) 
{
    trs[x].style.position = 'fixed';
    trs[x].style.top.setExpression = "this.offsetParent.scrollTop";
}

对我有用!

答案 1 :(得分:1)

您应该尝试使用http://fixedheadertable.com/ jQuery插件。这应该可以消除任何跨浏览器的问题,并且更具有前瞻性。

答案 2 :(得分:0)

对于同样的想法,最好使用jQuery并使用jQuery执行相同的工作,这将适用于所有浏览器并删除setExpression。

类似的东西:

var MyMainControl = $(".StyleOf");
MyMainControl.attr("top", MyMainControl.parent(".TheKeeper").offset().top );

或者如果你有很多

jQuery(document).ready(function() 
{
    jQuery(".StyleOf").each(function(i, selected) {
        var MyMainControl = $(selected);
        MyMainControl.attr("top", MyMainControl.parent(".TheKeeper").offset().top );
    }
}

我认为html就像

<div class="TheKeeper">
 <div>
   <div>
     <div class="StyleOf"></div>
   </div>
  </div>
</div>

setExpression用于make css与ie6兼容。

你可以获得一些其他准备就绪的标题网格...... :)