0

我是 JS 新手,正在尝试为一个网站编写一个简单的书签,该网站的 div 类“可折叠”设置为 display: none; 我想通过一键设置所有具有“可折叠”类的元素来显示:块。浏览该网站时,我设法将以下代码放在一起,当我将其粘贴到 Google Chrome 的 JS 控制台时,它运行良好:它返回值“块”,但网站上的效果是我所寻求的。但是,当我使用 URL javascript:mycode... 创建一个书签时,它只会显示一个带有文本“block”的空白页面。

这是我的代码,如果有人能告诉我我做错了什么,我将不胜感激:

javascript:function getElementsByClassName(classname, node)  {
    if(!node) node = document.getElementsByTagName("body")[0];
    var a = [];
    var re = new RegExp('\\b' + classname + '\\b');
    var els = node.getElementsByTagName("*");
    for(var i=0,j=els.length; i<j; i++)
    if(re.test(els[i].className))a.push(els[i]);
    return a;};
var elems = getElementsByClassName('collapseable');
for (var i=0;i<elems.length;i+=1){
   elems[i].style.display = 'block';}
4

1 回答 1

1

当我尝试自己制作书签时,我遇到了同样的问题。我的解决方案是使用void (function({ /* your code */ })().

javascript:void(function(){
    var getElsByCN = document.getElementsByClassName ||
        function(classname, node)  {
            if(!node) node = document.body;
            var a = [],
                re = new RegExp('\\b' + classname + '\\b'),
                els = node.getElementsByTagName("*");
            for (var i = 0, j = els.length; i < j; i++)
                if (re.test(els[i].className))
                    a.push(els[i]);
            return a;
        };
    var elems = getElsByCN('collapseable');
    for (var i = 0; i < elems.length; i++)
       elems[i].style.display = 'block';
)();

这是有效的,因为它返回一个undefined值,因为使用void. 当您的脚本block在页面上写入时,很可能是因为这是该函数设置/访问的最后一个值。

于 2013-05-24T13:08:40.243 回答