草庐IT

仅限 Javascript 的 DOM 树遍历 - DFS 和 BFS?

任何人都可以提供代码、伪代码,甚至提供良好的链接以在纯JavaScript(没有JQuery或任何辅助库)中实现DFS(深度优先搜索)和BFS(广度优先搜索)吗?我一直试图了解如何实现这两种遍历,但我似乎无法真正区分BFS和DFS实现的区别。如果我们想要一个具体的问题作为示例:我想在给定节点向下遍历DOM,并获取所有类名。(我能想到的唯一遍历方法是遍历每个父节点,从该节点获取我需要的东西,在这个例子中是类名,然后看看他们是否有child,递归每个child。我相信这是DFS?同样,我很难理解DOM遍历实现中的差异!)最后,抱歉,如果这是重复的。我到处搜索好的、清晰的例子,但没有找到任何

javascript - 如何使用 Javascript 在浏览器的可编辑内容窗口中找出光标处的 DOM 节点?

我正在寻找一种适用于跨浏览器(即IE、Firefox和Safari)的解决方案。 最佳答案 我假设“可编辑内容窗口”是指打开了contenteditable的元素或打开了designMode的文档。还有两种情况需要考虑:用户做出选择的情况和只有插入符号的情况。下面的代码在这两种情况下都适用,并且会为您提供完全包含所选内容的最里面的元素。如果选择完全包含在文本节点中,则在IE中获取该文本节点会稍微复杂一些(在其他浏览器中微不足道),因此我没有在此处提供该代码。如果你需要,我可以挖出来。functiongetSelectionConta

javascript - 扩充 DOM 元素节点的原型(prototype)?

我知道如何为每个对象添加新方法-通过扩充对象的原型(prototype):Object.prototype.foo=function(){};但是,是否可以只为DOM元素节点定义新方法?DOM元素节点对象有原型(prototype)吗?或者是否有一般DOM节点的原型(prototype)?或者原型(prototype)对象只存在于内置对象中吗? 最佳答案 是的,但不是在所有浏览器中。InternetExplorer8支持DOM原型(prototype)(在一定程度上),Firefox、Chrome、Opera和Safari也是如此。

DOM 对象的 Javascript 集合 - 为什么我不能使用 Array.reverse() 反转?

如以下代码所示,反转DOM对象数组可能会出现什么问题:varimagesArr=newArray();imagesArr=document.getElementById("myDivHolderId").getElementsByTagName("img");imagesArr.reverse();在Firefox3中,当我调用reverse()方法时,脚本停止执行并在WebDeveloperToolbar的控制台中显示以下错误:imagesArr.reverseisnotafunctionimagesArr变量可以用for循环遍历,可以访问到imagesArr[i]这样的元素,为什么

javascript - 获取 DOM 中的所有 href 链接

我需要编写代码,将网页中的所有href链接放入一个数组中。这是我到目前为止所拥有的:vararray=[];varlinks=document.links;for(vari=0;i但是,这在Gmail收件箱之类的页面上不起作用,因为某些链接位于iframe中。我怎样才能获得所有链接,包括iframe内的链接?另外,这是一个googlechrome扩展。在list中,我将all_frames设置为true-这有什么不同吗?谢谢 最佳答案 记住一点文档.链接文档.图像文件.表格文档.表单[0].元素document.getElement

javascript - 仅使用 JavaScript 将 Remove Class 添加到 DOM 元素,以及这两种方式中的最佳方式

使用JavaScript将类添加到DOM元素的好方法是什么?并删除。我遇到了以下用于添加的代码:1:Element.prototype.addClassName=function(cls){if(!this.hasClassName(cls)){this.className=[this.className,cls].join("");}};2:document.querySelector(element).classList.add(cls)他们两个似乎都对我有用。它们之间有什么区别,哪个最好? 最佳答案 1。如果你被prototy

javascript - 将所有 Javascript 控制台输出发送到 DOM 元素

如何将所有控制台输出发送到DOM元素,以便无需打开任何开发人员工具即可查看?我想看到所有输出,例如JS错误、console.log()输出等。 最佳答案 我发现上面接受的答案很有帮助,但它确实有几个问题,如评论中所示:1)在Chrome中不起作用,因为“前者”没有考虑到this上下文不再是控制台,解决方法是使用JavaScriptapply方法。2)它不考虑传递给console.log的多个参数我也希望它可以在没有jQuery的情况下工作。varbaseLogFunction=console.log;console.log=func

javascript - jQuery 对象和 DOM 元素有什么区别? .get() 和 .index() 的区别?

当我试图找出jQuery的.get()之间的区别时,我被引出了这个问题。和.index(),我查看了jQueryAPI,但我仍然不明白它们之间的区别,也许我不理解术语?jQuery对象和DOM元素有什么区别?DOM元素和DOM节点是一回事吗?他们只是吗?和等等DOM节点/DOM元素只是一个HTML标签吗?编辑:DOM不就是页面的结构吗?etc.? 最佳答案 HTML!=DOM!=Javascript!=jQuery,但它们都密切相关。浏览器从网络服务器接收一个HTML文档,它只是文本。浏览器继续将此文本解析到一个内部结构中,它实际上

javascript - Recaptcha v2 在重置时抛出错误并且其容器元素从 DOM 中移除

当我显式呈现Recaptchav2然后在将其从DOM中删除之前重置它时,大约40秒后我在浏览器控制台中收到错误消息。我有一个JSFiddle可用于重现该问题。相关代码摘录如下:constrecaptchaHolder=document.getElementById('...');constrecaptchaWidgetId=grecaptcha.render(recaptchaHolder,{/*...*/});//thenlatergrecaptcha.reset(recaptchaWidgetId);recaptchaHolder.parentElement.removeChild

javascript - 将整个 DOM 复制到新窗口

你好我有一个渲染的jsp可以做我想要的,我需要在第二个显示器上显示它,我将如何复制当前窗口的整个dom并创建一个全新的窗口?我稍后会希望主人进一步编辑那个子窗口并写信给它。非常感谢任何见解。 最佳答案 那会很棘手。你当然可以打开一个新窗口并与之通信,但你不能传递DOM对象。您基本上需要将生成的DOM转换为字符串,将其传递到新窗口,然后将其作为文档进行解析。像这样:CopyCurrentWebpageIntoaNewWindow 关于javascript-将整个DOM复制到新窗口,我们在S