isEqualNode 因 html 空白不同而失败

2023-11-30

当我使用使用不同空格的 html 字符串时,我发现 Node.isEqualNode() 方法出现意外行为。无论有或没有空格,html 结构都是等效的,但 innerText 属性具有不同的值。

这仅用于测试目的,因此不要对 html 字符串投反对票!

var html = `<table>
              <tbody>
                <tr>
                  <td>a</td>
                  <td>b</td>
                </tr>
              </tbody>
            </table>`

var div_1 = document.createElement('div')
div_1.innerHTML = html

var div_2 = document.createElement('div')
div_2.innerHTML = html.replace(/ |\n/g, '')  // removes whitespace

console.log(div_1)
console.log(div_2)
console.log(div_1.isEqualNode(div_2)) // false

div_1.innerText 包含所有空白以及 a 和 b,而 div_2.innerText 仅包含 a 和 b。

这看起来很奇怪,我想知道这是否是有意的行为。


我认为这是有道理的。在 html 中,元素之间的空格是有意义的。不在您提供的特定表格中,但通常/经常是这样。

但还要注意非词汇空白is期间被忽略isEqualNode检查一下,这很好!

这是一个例子(和a fiddle)演示这两种情况:

var html = [
    `<span>hello</span> <span>world</span>`,
    `<span>hello</span><span>world</span>`,
    `<span
   >hello</span><span
>world</span>`,
];

var divs = [];
html.forEach((x) => {
    var div = document.createElement('div');
    div.innerHTML = x;
    divs.push(div);
});

divs.forEach((x, i) => {
    console.log(i);
    divs.forEach((y, j) => {
        if (j !== i) {
            console.log(`${i}:${j} -- ${x.isEqualNode(y)}`);
        }
    });
});

该代码是边缘时髦与所有i and y and forEach,但我认为仍然是一个有用的演示。

前两个是不同的——我们可以看到这一点。如果是html则显示would be不同的。

html output in browser
<span>hello</span> <span>world</span> hello world
<span>hello</span><span>world</span> helloworld

第三个有空格但以某种方式评估与第二个完全相同的含义.

<span
   >hello</span><span
>world</span>

第二个和第三个产生helloworld and helloworld(无空格)渲染时!

这就是我们得到的输出:

0
"0:1 -- false"
"0:2 -- false"
1
"1:0 -- false"
"1:2 -- true"
2
"2:0 -- false"
"2:1 -- true"

Guess I didn't need to compare half of those as they're repeats, but you get the point.

还有另一个例子展示了如何DOMParser将这种情况下的内容拆分为文本节点在这个答案.


现在令我烦恼的是,同样的事情也发生在 XML 中,我认为,甚至 Oracle 所说的无关紧要的空白仍然产生一个错误isEqualNode.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

isEqualNode 因 html 空白不同而失败 的相关文章

  • 在 TCPDF 中设置背景颜色

    我已经手动设置了第一页的背景颜色 如下所示 pdf gt AddPage pdf gt SetFillColor 52 21 0 76 pdf gt Rect 0 0 pdf gt getPageWidth pdf gt getPageHe
  • 来自 DataURL 的 Blob?

    Using FileReader s readAsDataURL 我可以将任意数据转换为数据 URL 有没有办法将数据 URL 转换回Blob使用内置浏览器 API 的实例 用户 Matt 一年前提出了以下代码 如何在javascript中
  • HTML 覆盖高度覆盖整个可见页面

    我有一个使用 AJAX 加载一些内容的网页 我想在加载过程中显示带有加载指示器的覆盖层 以便用户无法与页面的大部分内容交互 除了顶部的菜单 我正在使用 jQuery 和jQuery BlockUI 插件 http malsup com jq
  • Three.js - 在代码中包含网格数据

    我有这个 Three js 代码 其中 JSON 加载器从文件 models mountain json 加载网格 var Three new function this scene new THREE Scene this camera
  • Youtube 播放器 Iframe,在 Firefox 上有声音但没有视频

    我正在使用 YT Player API 在滑块内创建多个 iframe youtube 视频 第一个视频在 onYouTubeIframeAPIReady 之后调用 当我单击正常工作的下一个按钮时 会出现下一个视频 但是当我尝试在 Fire
  • Chrome SuppressDifferentOriginSubframeJSDialogs 使用 JS 设置覆盖?

    Chrome 开发团队显然刚刚推出了一项名为 SuppressDifferentOriginSubframeJSDialogs 的新 功能 这使得默认情况下不会显示来自与父级不同域上的 iFrame 的警报 确认框 https www ch
  • JQuery 动画文本

    找到简单 简单的动画文本是非常困难的 喜欢这个网站上的 内爆 http codecanyon net item jquery text animation full screen preview 233445 http codecanyon
  • 向对象添加元素

    我需要填充一个 json 文件 现在我有这样的东西 element id 10 quantity 1 我需要添加另一个 元素 我的第一步是使用该 json 将该 json 放入对象类型中cart JSON parse 现在我需要添加新元素
  • dompdf:找不到图像或类型未知

    这是我的代码 我几乎尝试了所有在 PDF 上显示图像的方法 但仍然不起作用 你能帮我解决这个问题吗 我还将 DOMPDF ENABLE REMOTE 设置为 true 结果仍然相同 require once dompdf autoload
  • JQuery DataTable 单元格从行单击

    我正在尝试在 jquery 数据表上实现一个函数 该函数返回单击行的第一列和第四列 我正在遵循这个示例 它允许我操作单击的行http datatables net examples api select single row html ht
  • 专用网络:web3.eth.getAccounts() 始终发送空数组

    我正在运行一个私人以太坊网络 我确实用https aws amazon com blockchain templates 整个设置已经完成 AWS 上的设置看起来正确 现在 我正在尝试创建帐户并检索所有这些帐户 为此 我使用以下方法 Web
  • ReactJS:从没有 onChange 事件的 props 中选择默认值?

    所以 我只是想知道我是否绝对需要在 React 中的选择组件上有一个 onChange 事件处理程序 我有一个道具传递我想要选择的选项的默认值 如果我有的话 它就没有问题
  • 在 vue.js 模板中包含外部脚本

    我是 Vue js 和 web pack 的新手 所以我决定使用 vue cli webpack 来构建初始应用程序 我试图包含一个外部脚本 例如组件 不需要的模板中 但是 Vue 警告这是不允许的 我的 index html 文件与最初生
  • Chrome Javascript 调试器暂停时不会重新加载页面

    有时 当我在 Chrome 中调试某些 javascript 并且暂停了 javascript 时 如果我尝试重新加载页面 chrome 只会 继续 调试器 单步执行到下一个断点 似乎没有任何方法可以强制 javascript 完全停止运行
  • 如何在 angularjs 中修剪()字符串?

    有角度特定的方法吗 如果没有 我应该使用内置的jquery 来做到这一点吗 如果我应该使用内置的jquery 如何在不使用 的情况下访问trim 函数 或者这是必要的 编辑 是的 我知道 str trim 对不起 我需要这个才能在 IE 8
  • 使用文本遮盖视频

    是否可以使用 HTML CSS 文本来屏蔽视频 我已经找到并设置了这种工作方式 但没有一种允许文本后面有透明背景 例如 这支笔要求您进行某种填充 它并不是真正掩盖实际视频 而是创造幻觉 https codepen io dudleystor
  • 常规 JavaScript 可以与 jQuery 混合使用吗?

    例如 我可以采用这个脚本 来自 Mozilla 教程 https developer mozilla org en Canvas tutorial Basic usage
  • C# 中的 mshtml.HTMLDocumentClass

    在 C 中 我设法从 InternetExplorer 对象获取整个 HTMLDocumentClass 导航到某个 URL 然而 在 Visual Studio 2008 的调试模式下 该特定 URL 的 HTMLDocumentClas
  • 使用 jquery 提供附加功能时菜单未正确对齐

    I need to make a mega menu similar to one as show in image below 到目前为止 我已经能够在某种程度上使其发挥作用 例如jsFiddle 在这里 http jsfiddle ne
  • FullCalendar 检查选择日是否有活动?

    我正在使用 Full Calendar js 插件 到目前为止一切顺利 但我想检查开始和结束之间的选择是否有事件 我只需要返回 true 或 false 基本上 如果日期选择中已经存在事件 我想阻止用户创建事件 var calendar c

随机推荐

  • 如何使用 wget 模块从 URL 列表下载 PDF?

    我有一个 Python 脚本 它可以从website与 Selenium 并将它们存储在列表中 现在 我想用以下命令下载它们wget module 这是代码的相关部分 其中脚本完成了从网站获取的部分 URL new links for li
  • 在 Objective c 中在 iPhone 上绘图 [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我对编程很陌生 我已经制作了一半的 简单 应用程序 但我想知道如何在屏幕上绘制图片 用户
  • 更改C中二维动态数组的大小

    我创建一个二维动态数组 a int calloc n 1 sizeof int for i 0 i lt n 1 i a i int calloc n sizeof int 然后我需要更改其大小 添加新行 a int realloc a n
  • 如何在 GAE 任务队列中执行需要 OAuth 的操作?

    我有一个简单的 Google App Engine 应用程序 其中包括 update更新 YouTube 播放列表的页面 它看起来像这样 class UpdatePage webapp2 RequestHandler decorator o
  • 如何四舍五入到指定数字的最接近倍数?

    我看过很多关于四舍五入到最接近的数字倍数的问题 但我无法很好地理解他们的方法 无法采用它们四舍五入到 45 或者他们使用其他语言的特定于语言的方法 如果上面的内容还没有多大意义 这里有一个更详细的解释 输入示例 int num1 67 in
  • Spark CSV - 找不到实际参数的适用构造函数/方法

    我在 java Spark 应用程序中的类型数据集的过滤器和映射上使用 lambda 函数时遇到问题 我收到此运行时错误 ERROR CodeGenerator failed to compile org codehaus commons
  • Google Guice 桌面应用程序 - 如何使其工作?

    我在我的网络应用程序中使用 Guice 没有出现任何问题 并且我想在桌面应用程序中使用它 我当然错过了一件事 某种方式告诉我的应用程序如何绑定所有内容并知道什么是什么 在网络应用程序中 我在应用程序类中对此进行了声明 我应该如何在桌面应用程
  • Firebase JWT 身份验证,持续发送令牌?

    您好 我是 Firebase 新手 但非常喜欢它 我读到了这个 https www firebase com docs security custom login html我能够成功创建 JWT 并针对我的 Firebase 帐户进行身份验
  • XAML 中 BackKeyPress 的挂钩命令

    有没有办法将 BackKeyPressed 事件连接到视图 XAML 中的命令 我正在使用 MVVM Light 我有一些可以显示的登录 注册屏幕 如果他们处于登录 注册过程中 这只是显示 隐藏用户控件 我希望能够拦截后退按钮 以便我可以显
  • 离子科尔多瓦相机不工作

    我正在使用以下内容Git 请参阅此处的代码 作为 Phonegap Build 的输入 并已在我的手机上正确安装该应用程序 iOS 该应用程序正确打开 但当我尝试拍照 单击按钮 时没有任何反应 它应该显示相机拍摄的图像 有人可以向我解释什么
  • 如何使用java从同一tomcat中的不同项目获取tomcat项目路径

    我正在使用此代码读取 tomcat 项目 称为 Project1 中的文件 现在我想使用 java util concurrent Tomcat 项目 称为 Project2 在不同的 tomcat 项目 称为 Project2 中获取此路
  • 图像预加载器如何工作?

    我很难理解图像预加载器的工作原理在java脚本中 因此 如果有人能用一个例子来解释他们如何工作 那将会有很大帮助 没有jquery 加载单个图像 浏览器将异步加载图像 这意味着当浏览器被赋予 src图像的 它将开始在后台加载该图像 但也会在
  • Java网络服务器和TIME_WAIT

    我在接收来自我公司生产的设备的信号的网络服务器方面遇到了问题 设备偶尔会重用刚刚使用过的源端口 这会导致 SYN 被服务器丢弃 然后设备会重试 直到旧套接字超出服务器上的 TIME WAIT 状态 然后服务器发送 SYN ACK 服务器是用
  • 如何在 howler.js 上链接声音

    我需要在 howler js 中播放一些声音 但我不知道如何链接它 例如 在字符串 BCG 需要先玩 b ogg 然后玩 c ogg 最后玩 g ogg 如果我只是使用 加载后 sound play b sound play c sound
  • 单击 Javascript 中的按钮显示 android DatePicker

    这是我的要求 我正在将一个 html 文件加载到 WebView 上 我在 html 文件中有一个按钮来选择日期 当我单击该按钮时 我想打开 Android 日期选择器对话框 选择日期后 我想在 html 文件中显示所选日期 谁能指导我 请
  • 如何使用半透明选择器选择屏幕上任意位置的颜色?

    小免责声明 这是我第一次在表单中搞乱图形 因此我对这里的概念不太熟悉 好吧 所以我一直在尝试制作一个应用程序来跟踪光标在整个屏幕中的位置并在其周围绘制一个椭圆 我借用的代码来自this问题 我更改了椭圆的 X 和 Y 位置 以便在光标周围自
  • 数据框的子集,其中一列的倒数第二个值

    我有一个包含很多列的 data frame 其中一列包含样本区域的代码 另一列包含样本的编号 我想从每个样本区域的倒数第二个样本中提取信息子集 我尝试了很多不同的事情 最后这是我最好的猜测 但它仍然不起作用 site lt sample 1
  • python 中的 list.insert() 实际上做了什么?

    我有这样的代码 squares for value in range 1 5 squares insert value 1 value 2 print squares print squares 0 print len squares 输出
  • nvd3 堆积面积图看起来有问题如何修复?

    我的堆积面积图如下所示 我使用的数据具有相同数量的值 就像示例中一样 我使用的数据位于 http pastebin com D07hja76 除了选择器之外 我使用的代码也几乎相似 var colors d3 scale category2
  • isEqualNode 因 html 空白不同而失败

    当我使用使用不同空格的 html 字符串时 我发现 Node isEqualNode 方法出现意外行为 无论有或没有空格 html 结构都是等效的 但 innerText 属性具有不同的值 这仅用于测试目的 因此不要对 html 字符串投反