这是我在StackOverflow上的第一篇文章,所以开始我很抱歉我的英语不太流利;)但是我试着用我的问题来解释。
这里是一个活生生的例子
http://codepen.io/anon/pen/JKGbdE
class S {
constructor(selectors) {
let self = this;
this.elements(selectors);
}
elements(selectors) {
this.selectors = selectors;
let result = document.querySelectorAll(this.selectors);
if( result.length == 1 ) {
result = result[0];
this.element = result;
} else {
this.elements = [].slice.call(result);
}
this.nodes = result;
return this.nodes;
}
parent() {
let self = this;
if( !!this.element ) {
this.nodes = this.element.parentNode;
} else {
this.elements.forEach = (item, key) => {
self.elements[key] = item.parentNode;
};
this.nodes = this.elements;
}
return this.nodes;
}
result(a) {
return this.nodes;
}
}
window.$ = (selectors) => {
let el = new S(selectors);
return el;
};
console.log('first ex: ', $('#el') )
console.log('second ex: ', $('#el').parent() )
<html>
<body>
<div id="el">test</div>
</body>
</html>
如果打开浏览器控制台,您将看到如下所示:
日志第一前任:-
S {selectors: "#el", element: <div id="el">, nodes: <div id="el">, …}
日志第二任前任:-
<body>…</body>
第二个例子是OK。我只想返回一个HTML节点。在第一个示例中,它应该只返回<div id="el />
。
有什么建议吗?
发布于 2016-06-09 15:17:04
在first ex:
中,您将返回new S(...)
和second ex:
- this.nodes
(DOM对象)。
除非扩展JS操作,否则不能期望获得DOMObject作为所有子函数的响应-- jQuery也不能给您这种可能性。
试试console.log(jQuery('.anything'))
-它还返回一个将DOM对象作为项的对象(确切地说,索引为0)。
您应该更改您的代码,以便它始终返回S
对象。
https://stackoverflow.com/questions/37729635
复制相似问题