用于隐藏html列的Javascript语法

时间:2009-07-07 17:39:54

标签: javascript html dom

我正在查看切换显示和隐藏表列的代码。

我假设这会创建一个数组:

var States = { };

为什么不需要new operator

此行是否将States col元素.isOpen属性设置为true?

States[col] = {isOpen : true}; 

我正在弄清楚如何修改此功能,以便我可以使用cookie保存此列的状态。即 - 当呈现页面时,默认情况下将列设置为none。但是,如果最后一个操作是show column并且页面被重新渲染,我希望该列仍然是打开的,而不是返回默认值。

代码:

/**************************************************************************
 *
 * Function:    toggleVis
 *
 * Description: Following Function hides and expands the main column.
 *              
 *
***************************************************************************/
// Set the default "show" mode to that specified by W3C DOM
// compliant browsers

  var showMode = 'table-cell';


// However, IE5 at least does not render table cells correctly
// using the style 'table-cell', but does when the style 'block'
// is used, so handle this

  if (document.all) showMode='block';

// This is the function that actually does the manipulation

var States = { };

function toggleVis(col){

    if (!States[col] || States[col].IsOpen == null)
    {
        States[col] = {isOpen : true}; // This assumes the cell is already shown
        //States[col] = {isOpen : false}; // This assumes the cell is already hidden
    } 

    //mode =  States[col].IsOpen ? showMode : 'none';
    mode =  States[col].IsOpen ? 'none' : showMode; //starts from closed, next click need open

    cells = document.getElementsByName(col);
    for(j = 0; j < cells.length; j++) cells[j].style.display = mode;

    States[col].IsOpen = !States[col].IsOpen;
}

4 个答案:

答案 0 :(得分:3)

var States = {}

这会创建一个新对象 - 数组和对象在javascript中非常相似,但存在一些细微差别。

States[col] = {isOpen : true} 

创建一个新对象并将其放入States对象的下一个索引中。您现在可以使用States.col1.isOpen来访问此值。

我注意到你有两种不同的输入方式:IsOpen en isOpen,这可能会给你带来麻烦。

接下来,你必须使用你想要的信息设置cookie - 看一下这个URL: http://www.w3schools.com/JS/js_cookies.asp

希望这有帮助!

答案 1 :(得分:1)

好吧,也许这有点偏离基础,但我认为你这样做完全是错误的。

  1. 下载jQuery并安装它(它是 大约17kb,一点点开销。)
  2. 当您生成页面时,为给定列中的每个td提供一个公共类,例如class ='col2'。
  3. 使用脚本库删除隐藏所有单元格。

    $(”。COL2).hide()

  4. 要显示列,请使用show函数:

    $('.col2').show()
    

    你已经完成了。

    使用正确的库,这样的事情变得如此简单,看到它以其他方式完成是很痛苦的。

答案 2 :(得分:1)

语法var States = { }使用JSON notation创建新对象。

同样,{isOpen : true}会创建一个isOpen属性等于true的新对象。

答案 3 :(得分:1)

您需要一些基本概念:

<强>第一

Cookie只是一个特殊格式的字符串,可以作为文档对象的属性访问:

document.cookie

您可以直接在toggleVis函数的末尾保存状态:

  ...
  States[col].IsOpen = !States[col].IsOpen;

  // uses the function from quirksmode.org
  createCookie("colState", States[col].IsOpen, 7 /*days until expiration*/);
}

并在窗口加载时读取cookie(这只是伪代码):

window.onload = function() { 
  // States[col] = readCookie("colState"); 
  // set the style for the columns
};

<强> SECOND

使用花括号声明对象,变量名称区分大小写。

States[col] = { isOpen : true };

不一样
States[col] = { IsOpen : true };

您似乎在代码中遇到此错误,因为您尝试阅读IsOpen但设置了isOpen。​​