- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Microsoft IE 和(根据评论)Edge 中,如果 ID 恰好是“extTabsBodyEleFile1273551781_renderTo”,则 getElementById()
会失败。
<!DOCTYPE HTML>
<html>
<body>
<div id="extTabsBodyEleFile1273551781_renderTo"></div>
</body>
</html>
此 ID 是自动生成的。以任何方式更改 ID 都可以解决问题。获取 div 的父节点并列出其子节点也包括该 div。
该错误可以在 IE 11.0.9600.19155 和 11.0.9600.18538 上重现 - 但它可以在另一台使用 IE 11...19155 的计算机上正常运行。
如果您在随机站点上打开开发人员控制台,将 DOM 资源管理器中任何元素的 ID 更改为上面的 ID,然后尝试通过 document.getElementById(' extTabsBodyEleFile1273551781_renderTo')
我意识到这是一个 Edge 错误,修复它只意味着更改 ID。我的问题是为什么会发生这种情况,为什么它没有在 Edge 的一个实例上发生(我找不到设置差异)以及如何生成 ID 以确保它不会再次发生。在这个地方更改它很容易,但在不知道为什么会发生的情况下,它可能会再次发生。
是否存在 ID 不应该具有的已知散列或数字组合?这是我可以使用元标记关闭的旧设置吗?
我希望这个问题对于 SO 来说不是太不具体 - 由于大量与 getElementById 相关的问题,搜索它被证明是徒劳的。
console.log(document.getElementById('extTabsBodyEleFile1273551781_renderTo'));
<div id="extTabsBodyEleFile1273551781_renderTo"></div>
更新:
看来 ID 在不区分大小写的情况下失败了:
extTabsBodyEleFile1273551781_renderTo
exttabsbodyelefile1273551781_renderto
EXTTABSBODYELEFILE1273551781_RENDERTO
ExttAbsbOdyELEfILE1273551781_rEndErtO
所有这些都会导致错误。
<小时/>更新:
IE开发者控制台似乎至少涉及到该错误。打开一个测试 HTML 页面,该页面显示尝试通过该 ID 在其内部检索元素的结果,而不是将其记录到控制台,如果 IE 在控制台关闭的情况下启动,则按预期工作 - 直到控制台打开并且页面刷新几次(1-5) 次,错误再次出现并持续到 IE 关闭并重新打开为止。出现错误后关闭开发者控制台似乎没有效果。
测试 HTML 托管于 netlify ,HTML代码:
<!DOCTYPE HTML>
<html>
<head>
<style>
table, th, td {border: 1px solid black;border-collapse: collapse;}
th, td {padding: 15px;}
</style>
</head>
<body>
<div id="extTabsBodyEleFile1273551781_renderTo"></div>
<div><p id="testresult"></p></div>
<script>
var testresults = document.getElementById('testresult');
var time = new Date().getTime();
testresults.innerHTML = "<h3>testresults:</h3><br><table><tr><th>ID</th><th>Result</th><th>Time</th></tr>" +
'<tr><td>extTabsBodyEleFile1273551781_renderTo: ' + "</td><td>" + document.getElementById('extTabsBodyEleFile1273551781_renderTo') + "</td><td>" + time + "</td></tr>" +
'<tr><td>extTabsBodyEleFile1273551781_renderTo through querySelector: ' + "</td><td>" + document.querySelector('*[id="extTabsBodyEleFile1273551781_renderTo"]') + "</td><td>" + time + "</td></tr>" +
'</table>';
</script>
</body>
</html>
最佳答案
TL;DR
如果你尝试选择它们,看起来有特定的字符串边缘返回 null,我发现有 3 个字符串无法在此 fiddle 中选择: https://jsfiddle.net/cogwrudx/4/
我运行了从 1273 到 1290 id 的测试,只发现了 3 个,但我想可能还有更多,我不知道为什么这些字符串如此重要,以至于 Edge 不允许搜索它们。
来源
我无法评论,但这真的让我很烦,所以我必须做更多的测试,看起来无论你对此字符串进行什么更改,它都会起作用,但它不适用于这个确切的字符串.
添加/删除任何字母/数字都可以。将下划线之前的最后一个数字更改为 2 而不是 1 也可以。事实上,将任何数字更改为不同的数字都是可行的。
看起来 Edge 不喜欢那个特定的字符串是有原因的,我真的很想知道为什么。
编辑 1
在做了一些更基本的测试之后,我运行了下一个 fiddle : https://jsfiddle.net/cogwrudx/4/
正如您在运行它并查看控制台后所看到的,他还没有找到另外 2 个 id:
not found: extTabsBodyEleFile1273351781_renderTo
not found: extTabsBodyEleFile1273451781_renderTo
not found: extTabsBodyEleFile1273551781_renderTo
因此,我认为没有像其他人建议的那样需要避免明显的模式,而是需要搜索非常具体的字符串,就好像您尝试设置与类相同的字符串一样,它也不会起作用。
仅供引用
我是在 Windows 10 上的 Edge 浏览器上测试的,而不是 IE11。
Microsoft Edge 42.17134.1.0
Microsoft EdgeHTML 17.17134
关于javascript - getElementById 在 IE 11(可能是 Edge)的 DOM 树中明确存在的非常具体的 ID 上失败 - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53318227/
我是 Robert,我在使用 JavaScript 时遇到了一些问题。 我得到了一个 (这是隐藏的)。我唯一想问你的是:我想检查日期是否在 中已通过。如果通过了我想改变CSS中容器的背景颜色。不幸的
所以我的问题是我想要求输入使用扫描仪的信息,但它根本不打印出来。当它显示跳过的扫描仪的值时,Scanner CheeseType = new Scanner(System.in);,我得到 null。
Fe_Order_Items fe_order_items_id fe_order_specification_id fe_users_id fe_menu_items_id fe_order_ite
人们普遍提到 - “Celery 是一个基于分布式消息传递的异步任务队列/作业队列”。虽然我知道如何使用 Celery 工作人员等。但内心深处我不明白分布式消息传递的真正重要性和意义以及任务队列在其中
我试图理解下面的代码,但有一些我以前从未见过的东西,那就是:“\&\&” 这是代码: int main() { fork() \&\& (fork() || fork()); exit(EXIT_SU
您好,我是论坛新手。 我有很多使用 python 的经验,但没有使用 tkinter 的经验。 这是我的代码: from tkinter import * def Done(): celEn
在 C# 中,假设我们有一个通用类和一个具体类 [Serializable] public class GenericUser { ... [Serializable] public class Co
我尝试使用的库有一个通用抽象类,其中有两个实现该基础的子类。我想编写一个类,它将根据构造函数参数的参数类型自动创建其中一个子级的实例。 基类没有默认构造函数 基类的构造函数也需要其他通用类的实例 代码
我是 Angular 的新手,我一直在尝试了解它的工作原理。我正在制作一个简单的应用程序,其中有人可以通过简单的 html 界面添加用户并使用 SQLite 将其存储在数据库中,然后他们可以编辑或删除
我想创建一个用于存储数据的对象,限制读/写访问。 例如: OBJ obj1; OBJ obj2; // DataOBJ has 2 methods : read() and write() DataO
注入(inject)/隔离密封在 dll 中且不实现接口(interface)的类的首选方法是什么? 我们使用 Ninject。 假设我们有一个类“Server”,我们想要注入(inject)/隔离“
在花费了至少 10 个小时的时间浏览在线资源、视频和教程之后,我有两个关于将我的 Android 应用程序与 mySQL 数据库连接的问题。 保存文件 1) 所有教程都将 php 文件保存在 C/WA
许多有经验的开发人员建议不要使用 Django multi-table inheritance因为它的性能不佳: Django gotcha: concrete inheritance通过 Jacob
我知道我冒着挨揍的风险,但我觉得我在这件事上要绕圈子。为了让模型可用于多个项目,我们已将模型移出到一个单独的项目(一个 DLL)中,作为一系列要实现的接口(interface)。我们的界面上有这一行:
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我遇到了一个特定 mac 的问题,它没有显示我正确构建的某个网站。我测试过的所有其他 mac 和 pc 都能正确显示网站,但是在所有浏览器中这个特定的 mac 显示不正确就像提到的那样,这在其他每台计
给定这段代码 public override void Serialize(BaseContentObject obj) { string file = ObjectDataStoreFold
我已经搜索了网络和我的服务器,但我无法找到我网站的 php.ini。我的网站出现以下错误。 Class 'finfo' not found Details G:\inetpub\wwwroot\lan
SQL 爱好者: 我正在尝试通过玩以下用例来挖掘我一些生疏的 sql 技能: 假设我们有一家有线电视公司,并且有跟踪的数据库表: 电视节目, 观看我们节目的客户,以及 观看事件(特定客户观看特定节目的
我正在设计一个使用 HTML5 网络组件(HTML 导入、影子 DOM、模板和自定义 HTML 元素)的网络应用程序,这些组件是通过普通 JavaScript(无框架)实现的。 Web 应用程序相当简
我是一名优秀的程序员,十分优秀!