我有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
答案 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 {
}
}
}