我在SO上发现了很多(部分)类似的帖子,但它们都涉及非常明显的错误,通常是因为给定的this
不是他们在要求this.innerHTML
时所相信的。
但是在这里我面临的情况是,执行暂停(使用Firefox调试器)在涉及this.innerHTML
的语句的断点上,同时:
this.innerHTML
返回undefined
this
DOM属性显示`innerHTML:“......某些文字......”后者符合我的预期,因为当前this
是一个简单元素<span class="summary">...some text...</span>
。
所以我想知道this.innerHTML
如何在这里返回undefined
。
另一种说明矛盾的方法,比较来自控制台的这两个答案:
this.innerHTML
- &gt; undefined
$(this)[0].innerHTML
- &gt; "...some text..."
我希望我只是(并且愚蠢地)错过了一些明显的东西。
编辑:我试图提供所涉及代码的摘录。
以下是模式化最有趣的部分:
$(document).ready(function() {
// ...some stuff
$('html').each(renderElement); // <-- here is the main call
// ...some stuff
}
function renderElement() { // <-- the involved function
if (this.innerHTML.match(/^\s*\[multi\]/)) { // <-- the this.innerHTML point
this.innerHTML = renderString(this.innerHTML);
return;
}
// Otherwise recursively explore each node
$(this).contents().each(function() {
switch (this.nodeType) {
case Node.TEXT_NODE:
// ...some stuff
break;
case Node.ELEMENT_NODE:
// ...some stuff
renderElement.call(this); // <-- here is the alternate (recursive) call
break;
default:
// Do nothing for any other nodeType.
}
});
}
注意:当问题发生时,必须通过备用调用调用renderElement
函数(因为涉及的<span>
不是第1级元素的一部分)。