Html和Internet Explorer:如何避免复制/粘贴隐藏的元素

时间:2014-02-06 11:24:00

标签: javascript jquery html css internet-explorer

我在HTML5文档中有一个TABLE。

我有一个使用jQuery hide()show()隐藏/显示某些行的视图选择器。

当用户选择表格时(以编程方式,使用“全选”按钮,请参阅下面的代码),然后复制/粘贴到例如Word或Outlook电子邮件中,行为与FF和IE不同。

  • FF:不会复制style='display: none;'的元素。这是期望和预期的行为
  • IE:复制ALL,然后粘贴ALL,这样我的视觉'技巧'对IE用户来说就没用了。

我添加了selectAll功能。只需要一个选择器并选择其中的所有文本。这是我从jQuery论坛复制/粘贴的东西。

jQuery.fn.selectText = function(){
    var doc = document;
    var element = this[0];
    // console.log(this, element);
    if (typeof element == 'undefined') {
        return;
    }
    if (doc.body.createTextRange) {
        var range = document.body.createTextRange();
        range.moveToElementText(element);
        range.select();
    } else if (window.getSelection) {
        var selection = window.getSelection();        
        var range = document.createRange();
        range.selectNodeContents(element);
        selection.removeAllRanges();
        selection.addRange(range);
    }
};

如何只选择可见元素?或者......还有其他html / js技巧吗?

顺便提一下我将向任何想要的人投票:

  • 更改用户

  • 强制用户更改浏览器

  • 让我只渲染可见的单元格并更改服务器代码

2 个答案:

答案 0 :(得分:1)

好像多次问过这个问题。 (1) - (2

似乎没有一个适合每个人的回复。

您可以在jQuery中使用is.(':visible')但不确定转换回javascript(不是很好)。

其他人建议克隆该表并仅复制隐藏在另一个表中的内容,但随后这会导致其他浏览器运行正常时出现问题。

你可以使用上面的方法,但这是一个讨厌的黑客。

答案here可能会让您感兴趣,但我不确定您要复制的内容以及是否值得付出努力。

<joke>

如果一切都失败了,这里有一些其他建议:

  • 更改用户

  • 强制用户更改浏览器

  • 仅渲染可见单元格并更改服务器代码

</joke>

答案 1 :(得分:0)

讨厌的黑客,但你可以:

  • 使用js onload在页面上的其他位置使用display:none
  • 克隆表
  • '隐藏'行实际上将它们从原始表的DOM中删除
  • 通过替换隐藏的克隆版本的表
  • 来恢复隐藏的行