问题标签 [dom]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
11 回答
28805 浏览

javascript - 如何确定是否已将动态创建的 DOM 元素添加到 DOM?

根据 spec,只有BODYandFRAMESET元素提供了一个“onload”事件来附加,但我想知道一个动态创建的 DOM 元素何时被添加到 JavaScript 中的 DOM 中。

我目前正在使用的超幼稚启发式方法如下:

  • 向后遍历元素的parentNode属性,直到找到最终的祖先(即parentNode.parentNode.parentNode.etc直到parentNode为null)

  • 如果最终祖先具有已定义的非空主体属性

    • 假设有问题的元素是 dom 的一部分
  • 别的

    • 在 100 毫秒内再次重复这些步骤

我所追求的要么是确认我所做的是足够的(同样,它在 IE7 和 FF3 中都有效),要么是一个更好的解决方案,无论出于何种原因,我都完全没有注意到;也许我应该检查其他属性等。


编辑:我想要一种与浏览器无关的方式,不幸的是,我并不生活在一个浏览器的世界中;也就是说,感谢您提供特定于浏览器的信息,但请注意您知道它可以在哪个浏览器运行。谢谢!

0 投票
6 回答
134575 浏览

javascript - 按键修改后如何获取 HTML 输入的新值?

我有一个 HTML 输入框

我已经为“ keyup ”事件附加了一个处理程序,但是如果我在事件处理程序期间检索输入框的当前值,我会得到原来的值,而不是原来的值!

我试过拿起' keypress '和' change '事件,同样的问题。

我确信这很容易解决,但目前我认为唯一的解决方案是让我在未来几毫秒内使用短暂的超时来触发一些代码!

无论如何在这些事件期间获得当前值?

编辑:看起来我的 js 文件有缓存问题,因为我稍后检查了相同的代码,它工作得很好。我会删除这个问题,但不确定这是否会失去发表想法的好心人的代表:)

0 投票
2 回答
6780 浏览

javascript - 在 Javascript 中使用 addEventHandler 的安全、通用方式?

在深入探讨这个问题的细节之前,我想先说明一下情况。我们的网络分析公司是大型网站的顾问,并且(除了添加单个 SCRIPT 标签)我们无法控制页面本身。

我们现有的脚本使用“旧”方式安装处理程序(element.onclick = blah 的花哨版本;它也执行原始处理程序)完全不知道页面上的“新”(addEventListener 或 attachEvent)处理程序。我们想解决这个问题,使我们的脚本能够在更多站点上运行,而无需进行太多自定义开发。

这里最初的想法是让我们自己的脚本使用 addEventListener/attachEvent,但这会带来一个问题:客户端的站点使用“旧”方式设置处理程序,它会清除我们安装“新”方式的处理程序。快速而肮脏的测试表明这在 IE7 和 FF3 中都会发生,尽管我没有测试整个浏览器范围。还有一个风险是,如果我们在页面的事件处理程序已经设置后使用“新”方式,我们可能会删除它们的处理程序。

所以我的问题是:我可以使用什么安全技术来使用 addEventListener/attachEvent 在 Javascript 中添加事件处理程序,无论页面上的其他事件处理程序是如何安装的,它都可以工作?

请记住:我们无法修改安装我们脚本的站点。(我必须强调,因为对此类问题的默认答案始终是,“只需重写页面,以相同的方式完成所有操作。”)

0 投票
3 回答
20568 浏览

javascript - 使用 JavaScript 获取 2 个 DOM 元素之间的相对位置

我已经实现了一组可以使用 jQuery 拖放到某些容器中的可拖动元素。我需要的是一个无需用户交互即可将元素移动到特定容器的动画。问题是元素和放置容器位于DOM 的完全不同的部分,并且大多使用浮动定位。

我只需要一些代码来获取 2 个浮动 DOM 元素之间的绝对位置差异,最好使用 jQuery。我发现的唯一一件事是一些向上解析 DOM 的 hack,但总是非常特定于浏览器(例如“这不适用于 Firefox 或 IE 或其他任何东西”)。

最好是这样的:

或在 jQuery 表示法中:

0 投票
13 回答
40929 浏览

javascript - 唯一的元素 ID,即使元素没有

我正在编写一个 GreaseMonkey 脚本,在其中迭代一堆元素。对于每个元素,我需要一个字符串 ID,以后可以使用它来引用该元素。元素本身没有id属性,我无法修改原始文档以赋予它属性(尽管我可以在脚本中进行 DOM 更改)。我无法将引用存储在我的脚本中,因为当我需要它们时,GreaseMonkey 脚本本身就会超出范围。例如,有什么方法可以获取浏览器使用的“内部”ID?仅 Firefox 的解决方案很好;可以应用于其他场景的跨浏览器解决方案会很棒。

编辑:

  • 如果 GreaseMonkey 脚本超出范围,您以后如何引用这些元素?他们的 GreaseMonkey 脚本正在向 DOM 对象添加事件。我无法将引用存储在数组或其他类似机制中,因为当事件触发时,数组将消失,因为 GreaseMonkey 脚本将超出范围。因此,事件需要某种方式来了解附加事件时脚本所具有的元素引用。并且有问题的元素不是它所附加的元素。

  • 你不能只在元素上使用自定义属性吗?是的,但问题在于查找。我不得不求助于遍历所有元素,以寻找将自定义属性设置为所需 id 的元素。这当然可以,但在大型文档中可能非常耗时。我正在寻找浏览器可以进行查找工作的东西。

  • 等等,你能不能修改文件?我无法修改源文档,但我可以在脚本中进行 DOM 更改。我会在问题中澄清。

  • 你不能使用闭包吗?Closuses 确实有效,尽管我最初认为它们不会。看我后面的帖子。

这听起来像是对以下问题的回答:“我可以使用一些内部浏览器 ID 吗?” 没有。”

0 投票
6 回答
26400 浏览

php - 什么是回调函数以及如何在 OOP 中使用它

我想使用php 简单的 HTML DOM 解析器从充满文章的页面上的每篇文章中获取图像、标题、日期和描述。在查看 API 时,我注意到它有一个 set_callback 设置回调函数。但是我不确定这是做什么的或我将如何使用它?在其中一个示例中,它用于调用删除一些内容的函数,我想知道您是否必须使用它来调用所有函数?

我想我想知道为什么我使用它,它有什么作用,因为我以前从未遇到过回调函数!

0 投票
4 回答
33109 浏览

c# - 如何从 C# 中的 HTML 字符串操作 DOM?

目前,我发现能够从包含 HTML 的字符串中操作 DOM 的最佳方法是:

有两个问题:

  1. 需要WebBrowser对象!
  2. 这不能与多线程一起使用;我需要一些可以在不同线程(除了主线程)上工作的东西。

有任何想法吗?

0 投票
6 回答
81799 浏览

javascript - 如何访问没有 ID 的 HTML 元素?

例如在下面的代码片段中 - 我如何在知道父元素 ID(header-inner div)的情况下访问 h1 元素?

谢谢!

0 投票
1 回答
4350 浏览

php - 有没有更好的方法来更改 PHP 中的 DOMElement->tagName 属性?

我刚刚为我的 MVC 框架构建了一个文本框控件,在完成整个文档之前,我在从 ServerTag 继承的所有内容(又从 DOMElement 继承)上调用 PreRender。

我发现更改 DOMElement 派生对象的 tagName 的唯一方法是用一个新的替换它,其中所有属性都与旧的同步。

这就是代码中的样子:

这真的是唯一的方法吗?这种方式具有相当不利的副作用,即使控件背后的所有逻辑都归零。

0 投票
1 回答
1698 浏览

php - PHP:从 DOMNode 对象中删除属性

我有一个DOMNode具有某些属性的对象。$Node->attributes是 a DOMNamedNodeMap,它没有用于删除映射中的条目之一的方法。该类DOMNode也没有从元素中删除属性的方法。我查看了许多其他相关类,但它们似乎都没有提供从其父节点中删除属性节点的机制。

DOMNode::removeChild不工作;DOMAttr如果我将对象传递给它,它会引发“未找到错误” 。

除了构建一个新DOMNamedNodeMap的并向它添加所有属性之外,我不想要的属性除外……有什么想法吗?谢谢。