如何让函数判断是否应用于 "this" 或其他元素 ID
How to have a function tell whether to apply on "this" or other element ID
我有这样的功能:
function toggle(me, style) {
var myelm = me == '' ? this : document.getElementById(me);
myelm.classList = style;
}
我希望函数知道何时必须将样式应用于触发元素或其他元素,如以下示例所示:
<div onclick="toggle(this);"></div> <!--this function should apply to this element only-->
<div onclick="toggle('otherelement');"></div> <!--this should apply to other element of the DOM-->
但它仅在指定 ID 时有效,不会按预期应用于 this
。怎么了?
在第一种情况下,您传递了一个 DOM 元素,在第二种情况下,您传递了一个(非空)字符串。因此,在任何一种情况下,您检查的条件 me == ''
都不成立。其次,this
与函数无关,因为您永远不会使用 this
绑定调用它(this
绑定与传递 this
作为参数不同)。
你需要检查参数的数据类型,当它是一个字符串时,检索 DOM 元素,否则只使用给定的参数 (me
) -- 不是 this
:
另一件事:您需要在 classList
属性:
上调用 toggle
方法
function toggle(me, style) {
var myelm = typeof me != 'string' ? me : document.getElementById(me);
myelm.classList.toggle(style);
}
注意:确保同时传递第二个参数(样式)!
片段:
function toggle(me, style) {
var myelm = typeof me != 'string' ? me : document.getElementById(me);
myelm.classList.toggle(style);
}
.highlight { background: yellow }
<div id="otherelement">This is other element</div>
<p></p>
<div onclick="toggle(this, 'highlight');">toggle this</div>
<div onclick="toggle('otherelement', 'highlight');">toggle other element</div>
我有这样的功能:
function toggle(me, style) {
var myelm = me == '' ? this : document.getElementById(me);
myelm.classList = style;
}
我希望函数知道何时必须将样式应用于触发元素或其他元素,如以下示例所示:
<div onclick="toggle(this);"></div> <!--this function should apply to this element only-->
<div onclick="toggle('otherelement');"></div> <!--this should apply to other element of the DOM-->
但它仅在指定 ID 时有效,不会按预期应用于 this
。怎么了?
在第一种情况下,您传递了一个 DOM 元素,在第二种情况下,您传递了一个(非空)字符串。因此,在任何一种情况下,您检查的条件 me == ''
都不成立。其次,this
与函数无关,因为您永远不会使用 this
绑定调用它(this
绑定与传递 this
作为参数不同)。
你需要检查参数的数据类型,当它是一个字符串时,检索 DOM 元素,否则只使用给定的参数 (me
) -- 不是 this
:
另一件事:您需要在 classList
属性:
toggle
方法
function toggle(me, style) {
var myelm = typeof me != 'string' ? me : document.getElementById(me);
myelm.classList.toggle(style);
}
注意:确保同时传递第二个参数(样式)!
片段:
function toggle(me, style) {
var myelm = typeof me != 'string' ? me : document.getElementById(me);
myelm.classList.toggle(style);
}
.highlight { background: yellow }
<div id="otherelement">This is other element</div>
<p></p>
<div onclick="toggle(this, 'highlight');">toggle this</div>
<div onclick="toggle('otherelement', 'highlight');">toggle other element</div>