Javascript代码无法正常工作以隐藏列

时间:2016-10-27 12:44:05

标签: javascript hide show

我有Gridview我希望根据某些条件隐藏列。所以为此我写了一个js代码,它位于

之下
function GridExpInfo_ClientInsert() {
    var rowVal = GridExpInfo.Rows.length - 1;
    for (i = 0; i < GridExpInfo.Rows.length; i++) {
        if (GridExpInfo.Rows[i].Cells[7].Value == "" || GridExpInfo.Rows[i].Cells[7].Value == "0") {
            document.getElementById('GridExpInfo_ob_GridExpInfoBodyContainer_ctl33_'+rowVal+'_ctl00_'+rowVal+'_Button1_'+rowVal+'').style.display = "none";
        } else {                        
        }
    } 
}

它工作正常,直到添加了一行。但如果我去添加第二行会发生什么,第一行再次获得show,第二行(当前)行获得hide

那么如何隐藏其值由0

组成的所有行

3 个答案:

答案 0 :(得分:0)

看起来您正试图隐藏从asp.net继承Master Page的页面中的列。如果是这种情况,ct133和ct100名称将在修改页面时 100%更改

您应该为他们分配一个 CSS CLASS ,然后用 CSS CLASS

隐藏/显示每个元素

在香草JS中

document.getElementsByClassName('HideThisColumn')[0].style.visibility = 'hidden';

使用JQUERY

 $(".HideThisColumn").hide();

<强> 修改 每个OP的评论我的版本是低 根据{{​​3}},IE 9+具有使用此功能的能力。你是在说你在开发IE 8吗?

答案 1 :(得分:0)

嗯尝试更简单地打破你的代码:

(assume obj.rows.length = 5)
clientInsert () {
    var rowVal = (5 - 1) = 4;
    for ( var i = 0; i < 5; i++ ) {
       // first Iteration...
       if ( obj.rows [ 0 ].cells [ 7 ].value == '' ||
            obj.rows [ 0 ].cells [ 7 ].value == "0" ) {
         var id = 'id_' + 4 + 'moreId_' + 4; // 'id_4_moreId_4'
         document.getElementById ( id ) = "none";
       }
       // second Iteration...
       if ( obj.rows [ 1 ].cells [ 7 ].value == '' ||
            obj.rows [ 1 ].cells [ 7 ].value == "0" ) {
         var id = 'id_' + rowVal + 'moreId_' + rowVal;
         // ID is always 'id_4_moreId_4'
         document.getElementById ( id ) = "none";
       }
    }
}

据我所见,你总是选择相同的DOM元素;您的ID永远不会改变。

有一件事,远离ID似乎更“现代”。使用通用CSS样式标记这些目标DOM元素将允许您使用简单的选择器,而不必使用所有ID内容。也许这在你的背景下不起作用,但需要考虑。

答案 2 :(得分:0)

经过深入研究和尝试,我终于破解了这个逻辑。这就是我所做的,它对我有用。

function GridExpInfo_ClientInsert() {
        var rowVal = "0";                  // assigned variable with value as 0
        for (i = 0; i < GridExpInfo.Rows.length; i++) {                
            rowVal = i;                   // assigning values which always takes the value of i
            if (GridExpInfo.Rows[i].Cells[7].Value == "" || GridExpInfo.Rows[i].Cells[7].Value == "0") {
                 document.getElementById('GridExpInfo_ob_GridExpInfoBodyContainer_ctl33_' + rowVal + '_ctl00_' + rowVal + '_Button1_' + rowVal + '').style.display = "none";
             }
            else {
            }
        }
    }