我有这个HTML代码:
<html>
<head>
...
</head>
<body>
<div>
<div class="foo" data-type="bar">
SOMECONTENTWITHMORETAGS
</div>
</div>
</body>
Run Code Online (Sandbox Code Playgroud)
我已经可以使用此函数获取"foo"元素(但仅包含其内容):
private function get_html_from_node($node){
$html = '';
$children = $node->childNodes;
foreach ($children as $child) {
$tmp_doc = new DOMDocument();
$tmp_doc->appendChild($tmp_doc->importNode($child,true));
$html .= $tmp_doc->saveHTML();
}
return $html;
}
Run Code Online (Sandbox Code Playgroud)
但我想返回DOMElement的所有html标签(包括其属性).我怎么能这样做?
如果你写下面的代码:
const e = document.body.firstChild;
if (e.nodeType === Node.TEXT_NODE)
console.log(e.data);
Run Code Online (Sandbox Code Playgroud)
您将在以下位置收到此错误e.data
:
TS2339:“ChildNode”类型上不存在属性“data”。
而如果条件为真 ( e.nodeType === Node.TEXT_NODE
) 则e
除了常规ChildNode
属性之外还有一些其他属性,例如data
和wholeText
。
我应该转换为什么类型(除了any
)?
DOMNodeInserted
当节点"被追加到"或"被追加"时调用event?
我问这个是因为以下代码:
function AddTextToContainer () {
var textNode = document.createTextNode ("My text");
var container = document.getElementById ("container");
if (container.addEventListener) {
container.addEventListener ('DOMNodeInserted', OnNodeInserted, false);
}
container.appendChild (textNode);
}
Run Code Online (Sandbox Code Playgroud)
然后:
function AddTextToContainer () {
var textNode = document.createTextNode ("My text");
var container = document.getElementById ("container");
if (textNode.addEventListener) {
textNode.addEventListener ('DOMNodeInserted', OnNodeInserted, false);
}
container.appendChild (textNode);
}
Run Code Online (Sandbox Code Playgroud)
两者都OnNodeInserted
在Chrome中调用.这是一个错误吗?
我正在尝试将非常方便的 Google Translate 翻译元素嵌入到网页中,这非常简单并且效果很好,但我需要更改在生成的 HTML 中显示的默认文本:
使用过许多 Google API 和 js 库后,我认为这不会有问题,因为它几乎肯定是可配置的,但环顾了一段时间后,我找不到任何对允许您设置此属性的属性的引用,并且总体而言,文档似乎很可怜。基本代码是:
<div id="google_translate_element"></div>
<script>
function googleTranslateElementInit() {
var translator = new google.translate.TranslateElement({
pageLanguage: 'en',
autoDisplay: false,
multilanguagePage: false,
layout: google.translate.TranslateElement.InlineLayout.SIMPLE
}, 'google_translate_element');
}
</script>
<script src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>
Run Code Online (Sandbox Code Playgroud)
当我创建 时,我对能够将其设置为属性感到失望translator
,因此我决定破解它并使用onDOMNodeInserted
侦听器在加载到<div id="google_translate_element"></div>
. 我在这里使用 jQuery,所以我的代码是:
$(document).ready(function(){
$('#google_translate_element').bind('DOMNodeInserted', function(event) {
$('.goog-te-menu-value span:first').html('Translate');
});
})
Run Code Online (Sandbox Code Playgroud)
这就是事情变得有趣的地方。Chrome 完美地加载了所有内容,并完美地完成了 innerHTML 替换。Internet Explorer (8) 完全忽略 DOMNodeInserted 侦听器,并且页面加载就像从未调用过 jQuery 函数一样。Firefox (10) 似乎加载良好(但根本没有翻译元素),然后冻结,开始吞噬内存,然后崩溃。
关于如何让这个innerHTML替换工作有什么想法吗?如果你知道displayLabel : "Translate"
类似的属性当然是首选,但除非它(以及一个非常丑陋的setTimeout
黑客),我有什么办法可以让它工作吗?
我需要在saymfony中管理xml文档.
我没有问题将xml放入Crawler()实例,修改现有节点,然后将xml放入文件中.
但我无法添加新节点.
当我尝试将一个带有appendChild方法的新节点添加到父节点时,我得到了:
错误的文件错误
当我尝试向抓取工具添加方法时,我得到了:
无法向爬虫添加两个不同的源?
如何将简单节点添加到现有爬网程序?
谢谢你的回复
我尝试过搜索但没有找到答案:
所以我知道,当浏览器传递或下载页面时,会生成该页面的树结构表示形式(称为 DOM)。然后可以使用 JavaScript 来操作该树的节点(表示元素的对象)。
现在如果我打开 Chrome 的开发者控制台并执行命令:
document.childNodes;
Run Code Online (Sandbox Code Playgroud)
我得到了我所期望的,即两个节点,即 DOCTYPE 和 html 节点
[<!DOCTYPE html>, html]
Run Code Online (Sandbox Code Playgroud)
如果我现在将一个变量分配给 html,然后检查它的节点,如下所示:
var htmlNode = document.childNodes[1];
htmlNode.childNodes;
Run Code Online (Sandbox Code Playgroud)
奇怪的事情发生了:
我按预期得到“头”节点,然后有一个“文本”节点,我不知道它来自哪里,最后按预期得到“主体”节点。
[head, text, body]
Run Code Online (Sandbox Code Playgroud)
我的问题是这个“文本”节点来自哪里?
我正在尝试使用nodejs从js文件中的html文件中按id获取元素。我收到错误“文档 ID 未定义”,因为节点默认不提供文档对象模型。
那么我如何在nodejs中使用document.getElementById()?
谢谢 !
我需要找到一个组件的offsetLeft。
componentDidMount(){
var tesNo =ReactDOM.findDOMNode(this.refs.dropDown.refs.input.offsetLeft)
}
<ReactAutocomplete
ref="dropDown"
/*.......*/
/>
Run Code Online (Sandbox Code Playgroud)
在调试时,我得到变量tesNo的值。之后,我得到了这个错误:
考虑将错误边界添加到树中以自定义错误处理行为。访问此站点以了解有关错误边界的更多信息。不变违规:参数似乎不是ReactComponent
如何解决这个错误?
是否可以比较原始数据类型的变量?我正在使用XMLDOM.DomNodes,它是一个具有一个字段的记录:
TYPE DOMNode IS RECORD (id RAW(12));
Run Code Online (Sandbox Code Playgroud)
所以我有两个节点,那么我可以通过它们的id字段来比较它们吗?我尝试了几个样品,乍一看似乎有效:
FUNCTION findParentNode(p_node IN xmldom.domnode) RETURN PLS_INTEGER
AS
nRetVal PLS_INTEGER;
BEGIN
FOR i IN ParentNodes.First .. ParentNodes.Last
LOOP
IF ParentNodes(i).id = p_node.id THEN
nRetVal := i;
EXIT;
END IF;
END LOOP;
RETURN nRetVal;
END;
Run Code Online (Sandbox Code Playgroud)
但Oracle文档中有一两件事让我担心: 原始数据是像VARCHAR2数据,只是PL/SQL不解释原始数据 是什么意思?如果pl/sql不解释raw,那么它可以比较吗?
dom-node ×10
javascript ×5
dom ×4
child-nodes ×1
document ×1
dom-events ×1
domdocument ×1
html ×1
jquery ×1
node.js ×1
oracle ×1
php ×1
plsql ×1
reactjs ×1
redux ×1
symfony ×1
textnode ×1
typescript ×1
web-crawler ×1
xml ×1
xmldom ×1