Javascript 为什么console.log的行为与.innerText/.innerHTML属性不同
我想用下面的代码给另一个人写一个答案,但是Javascript 为什么console.log的行为与.innerText/.innerHTML属性不同,javascript,Javascript,我想用下面的代码给另一个人写一个答案,但是console.log的行为不同于.innerText/.innerHTML属性。为什么?如何将控制台的输出记录到屏幕上而不是控制台上 HTML 编辑:我使用.innerHTML 您需要使用mouseevent中所需的属性 您的控制台日志正在记录event.target,即单击的按钮的名称 您的控制台具有所有事件属性,包括screenX、screenY等。如果您需要这些属性,请将event.target更改为event.screenX 这些事件的可用属性
console.log
的行为不同于.innerText
/.innerHTML
属性。为什么?如何将控制台的输出记录到屏幕上而不是控制台上
HTML
编辑:
我使用.innerHTML
您需要使用mouseevent中所需的属性
您的控制台日志正在记录event.target,即单击的按钮的名称
您的控制台具有所有事件属性,包括screenX、screenY等。如果您需要这些属性,请将event.target更改为event.screenX
这些事件的可用属性列表位于:
您还可以研究innerText、innerHTML和textContent分配给之间的差异。innerText
将始终将分配的值转换为字符串。当您执行console.log时,不会发生这种情况
控制台
API根据值的类型呈现值。值得注意的是,对象是以某种交互(折叠/展开)方式表示的,使用特定的字体样式(颜色、斜体等)向用户提供更多提示。此外,console
显示不一定是自己的属性或可枚举的属性。要自己再现这一点,需要相当多的编码
使用一个函数可以创建属性(包括继承属性)的JSON表示形式,这些属性是基本值且不为null,并且属性名称不都是大写(通常表示常量),这将有很大的帮助
此外,在保留换行符的DOM元素中显示(空白是预先设置的):
函数对象字符串(obj){
让结果={}
用于(让道具插入obj){
if(对象的类型[prop]!==“函数”&对象的类型[prop]!==“对象”&&prop.toUpperCase()!==prop){
结果[prop]=obj[prop];
}
}
返回obj.constructor.name+“:\n”
+stringify(result,null,2)+“\n”;
}
const ll=document.querySelector(`click`);
const tt=document.createElement(`div`);
const t=document.createElement(`pre`);
ll.addEventListener(`click`,函数(事件){
t、 innerText=objectString(事件)+
objectString(event.target)+
objectString(event.currentTarget);
tt.appendChild(t);
文件.正文.附件(tt);
});代码>
单击me
分配给innerText
将始终将分配的值转换为字符串。当您执行console.log
t.innerText+=event.target
将event.target
对象转换为字符串,并将[object object]
转换为字符串时,不会发生这种情况。请尝试innerHtml
@justin,因为没有任何变化。感谢您的回答,但是如果您可以从控制台输出中看到,我想显示target
和currentTarget
之间的差异。我想在DOM而不是控制台上获得结果。DOM上的objectString
打印和显示的属性和值并没有告诉我们这一点。我不明白您想要什么不同。对于target
和currentTarget
,我的答案中产生的输出明显不同。例如,当您单击“我”时,nodeName
属性具有不同的值(“按钮”与“强”)。是的,这个输出在DOM中。所以我不明白为什么要写“我想在DOM上而不是控制台上获得结果”,因为这正是我的答案。为了进一步突出区别,可以在返回值前面加上obj.constructor.name+”:\n“+
。我已经更新了我的答案。
<button type="button" id="click">Click <strong>me</strong></button>
const ll = document.querySelector(`#click`);
const tt = document.createElement(`div`);
const t = document.createElement(`p`);
ll.addEventListener(`click`, function (event) {
t.innerText += event;
t.innerText += event.target;
t.innerText += event.currentTarget;
tt.appendChild(t);
document.body.appendChild(tt);
console.log(event);
console.log(event.target);
console.log(event.currentTarget);
});