展开/折叠时会显示一行,而其他行则会隐藏

时间:2015-02-13 18:19:06

标签: javascript expand cognos cognos-10

这是一份知识产权清单。 所以我知道很多JS,但显然还不足以解决这个问题。我有一个列表,在该列表中我有一个层次结构将扩展几个层。我希望所有层开始隐藏但第一层。像这样的东西

第一层(显示)                           第二层(隐藏)                                                         第三层(隐藏)

我的JS代码在下面,对于我的生活,我无法理解。任何帮助将不胜感激。

function StartHidden() {
   var q=document.getElementById("ExpandedTable");

   // get the table
   tbl = q.parentNode.parentNode.parentNode.parentNode;
   var isFirstRow=true;

   for ( var i = 0; i < tbl.rows.length; i++) {
          var trCurrent = tbl.rows; // the current row
          var d = trCurrent.cells[0]; // first cell
          var c = d.firstChild;

          if (i < 2 || c.tagName.indexOf("IMG") != -1) {
                 c = c.src; // leave it visible, since it has + icon
for ( var j = 1; j < trCurrent.cells.length; j++) {
   trCurrent.cells[j].width="1"; 
}
          }
          else {
                 trCurrent.style.display = "none"; // hide the row
          }
   }
}

1 个答案:

答案 0 :(得分:0)

为了在报表中使用Cognos Javascript对象,您必须使用getFormWarpRequest函数,而不是直接使用文档对象。
正确的代码段应为:

var fW = (typeof getFormWarpRequest == "function" ?getFormWarpRequest() : document.forms["formWarpRequest"]);
// if it’s undefined, check if it is running in a portlet
if ( !fW || fW == undefined) { fW = ( formWarpRequest_THIS_ ?formWarpRequest_THIS_ : formWarpRequest_NS_ );}
但是,这只是解决方案的一部分,因为从Cognos 8.4开始,数据对象(列表,交叉表)是使用动态名称和IDS生成的。
因此,您应该使用getElementsByTagName方法而不是getElementById。 这里可以找到一个例子:
Ironside - IBM Cognos and JavaScript – Part II

可以简化工作的其他技巧将在Cognos中使用jQuery。这里有很好的记载:
Dynamic reporting in Cognos using jQuery
我在这里写的一个例子:
Dynamic custom exception in Cognos using jQuery
有关使用javascript的其他Cognos文档可以在这里找到:
Cognos - Upgrading JavaScript Applications