我想把display 为 none 的 div统统过滤掉
<div ... style="...;display: none;....>......</div>我写的:
re = new RegExp(/<DIV [^>]*?DISPLAY: none[^(DIV>)]*?>[\s\S]*?<\/DIV>/gi);
ss = ss.replace(re, "");
可是经常不起作用~~
各位看看哪有问题,还是会与服务器环境有关???

解决方案 »

  1.   

    我觉得这样更容易var ct=document.createElement("div");
    ct.innerHTML='<div ... style="...;display: none;....>...... </div>';
    var els=ct.getElementsByTagName("div"),len=els.length,cur;
    for(var i=0;i<len;i++) {
        cur=els[i];
        if(cur.style.display=='none')
            cur.parentNode.removeChild(cur)
    }
    alert(ct.innerHTML)
      

  2.   


    ss = ss.replace(/<div.*?display\s*:\s*none.*?<\/div>/img, "");
      

  3.   

    客户端做会比较困难。因为很难找到这个DIV的结束标签在哪里,最后结果就是替换得不完全结果导致HTML不完整。
    如果服务器端用ASP.NET的话可以考虑用给DIV加上runat="server"会好做很多。
    不知道为什么想要把它们过滤掉?它们本来就是不可见的。
      

  4.   

    我是要把iframe中的页面读取出来作为mail内容发送,不可见的部分在mail转发时都会变成可见,所以要过滤掉
    目前是有一部分能过滤,一部分不能过滤,超奇怪~~
      

  5.   

    通过dom移除,再取body.innerHTML作为要发送的html文档内容。
    var divs = document.getElementsByTagName("div");
    if (divs.length>0)
    {
        for(var i=0;i<divs.length;i++){
            if(divs[i].style.display == "none"){
                document.body.removeChild(divs[i]);
            }
        }
    }
    sendString = document.body.innerHTML;