vee*_*ain 8 css jquery internet-explorer
这似乎是IE特定的"功能".我用IE8测试过.用户John H通过在IE6和IE7中确认进行了贡献.
我有一些文本内置到我的页面中,并从元素的创建开始 style = "display: none;"
我没有使用jQuery来隐藏文本而且文本没有"显示".虽然为了进一步公开,我使用jQuery的.html()方法访问元素的内容.
但是,如果用户选择我的元素附近的文本display:none并复制已选择的内容,则会包含隐藏文本.就好像它已经正常显示一样.
标记看起来像这样:
...
<td align="left">
Text they should see
<div id="whateverButUnique" style="display:none;">Value I want hidden</div>
Some other text
</td>
Run Code Online (Sandbox Code Playgroud)
这是一个小提琴,我可以使用IE <9重现问题.
虽然这不是这个特定应用程序的严重问题,但它让我措手不及,我想知道这是一个"功能"还是我做错了什么.
我见过的大多数其他问题都display:none让他们的海报内容可见.同样,在选择,复制和最终粘贴之前,我的内容基本上是不可见的.
我可以阻止Internet Explorer用户通过复制/粘贴来查找此内容吗?我意识到他们可以在开发人员工具中查看它并查看源代码.
更新:由于其他用户的评论,我自己也尝试应用的风格visibility:hidden和z-index=-1.用户John H已经尝试了许多其他的隐藏尝试,但IE迄今为止顽强地允许这个功能漏掉.感谢所有伟大的想法!
更新:感谢您问希瑟沃尔特斯 ; 我需要在页面上使用的值仅在服务器端可用,但我在页面加载后使用它们通过jQuery/AJAX使用外部程序的额外处理生成链接.因此,我构建了隐藏但包含值的页面,然后对这些隐藏值进行操作以构建对它们有用的东西.
一旦我完成了使用它们构建有用的东西,我现在意识到我可以通过jQuery擦除它们并获得额外的性能.以下代码将为启用了javascript的每个人完成此操作:
$("[id^=whateverButUnique]").html("");
Run Code Online (Sandbox Code Playgroud)
由于页面上可能存在数百个元素,因此这种额外处理并不理想.
vega,我不相信这个解决方案对我有用,因为我必须在服务器端构建页面和我隐藏的内容.它们都是在服务器端循环中构建的,可能有数百个其他元素,因此我可以选择在服务器将所有内容放在表中(包含隐藏元素)或者第二次循环遍历它时将其构建到位(痛苦)并尝试强制显示元素:无法在不太可能被选中的地方.
Ohgodwhy,我想相信你的解决方案.在IE8中,隐藏字段没有显示在记事本中; 但是,我能够复制该部分并将其粘贴到Microsoft Word中.它不再被隐藏.
另一个因素起作用:这个页面已经非常重要了,所以我希望我能找到一个解决方案,阻止IE看到这些值而不添加另外100个潜在元素的传递......但我可能只需要.
更新:Robin Maben的建议看起来像是一个很好的解决方法!他的建议是隐藏data-x自定义HTML5属性中的值.尽管我(很可能)不符合HTML5标准页面,但这似乎仍然有效.如果你认为这是一个有价值的贡献,请向他投票.
更新:确认.我已经成功实现了Maben的建议,因此能够减少DOM查找的数量 - 我的页面上的每个元素都有一个.我已经使用我想要显示的项目循环遍历所有DIV,现在我可以同时自动访问data属性.在我的实现中看起来像这样:
<div style="display:none" data-call-number="..." id="stackLocatorLinkFillUp...">...</div>
Run Code Online (Sandbox Code Playgroud)
省略号表示正在进行的独特操作.id有一个简单的数字指示器,每个记录增加一个.
// Loop through all of the items on the page that start with my id
$("[id^=stackLocatorLinkFillUp]").each( function() {
// ...
// Grab the contents of the div
var innerContent = $(this).html();
// Extract the call number out of the data-call-number field
var callNumPreEncoded = $(this).data("callNumber");
// ...eventually...
$(this).html(...).css("display","block");
});
Run Code Online (Sandbox Code Playgroud)
感谢大家!
你试过这个visibility:collapse房产吗?
如果" Value I want hidden"部分纯粹用于计算目的,则应使用" data"属性.
像这样
<div data-custom-value="1001">Visible value </div>
Run Code Online (Sandbox Code Playgroud)
在jQuery中,HTML数据属性可以通过data()api 自动获得.
你可以做
someElement.data('customValue') 读取一个值.
和
someElement.data('customValue', newValue) 设置一个值.
希望我能正确分析你的问题.
元素的大小显示和位置并不重要,它被选择是因为当您在 IE<9 中选择内容时,您正在选择 html,然后粘贴该 html,其中包含隐藏元素。IE9 和其他浏览器可以正确地从选择中删除这些隐藏元素。我知道防止这种情况的唯一方法是不在 dom 中包含隐藏元素。