Развернуть / свернуть, показать одну строку, в то время как остальные скрыты

Это в списке Cognos. Так что я знаю много 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 ответ

Чтобы работать с объектами 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 и JavaScript - Часть II

Дополнительный трюк, который может облегчить работу, будет работать с JQuery в Cognos. Очень хорошо задокументировано здесь:
Динамическая отчетность в Cognos с использованием jQuery
И пример, который я написал здесь:
Динамическое пользовательское исключение в Cognos с использованием jQuery
Дополнительную документацию Cognos относительно работы с javascript можно найти здесь:
Cognos - Обновление приложений JavaScript

Другие вопросы по тегам