- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
请帮助我,我不明白到底是什么导致了错误。代码:-
class button extends HTMLElement{
constructor(){
super();
const shadow = this.attachShadow({mode: 'open'});
const button = document.createElement('button');
button.style.cssText = 'display:block';
button.textContent = super.textContent;
shadow.appendChild(button);
}
}
var Ω = (function () {
'use strict';
/**
* Create the constructor
* @param {String} selector The selector to use
*/
var Constructor = function (selector) {
if (!selector) return;
if (selector === 'document') {
this.elems = [document];
} else if (selector === 'window') {
this.elems = [window];
} else {
this.elems = document.querySelectorAll(selector);
}
};
/**
* Run a callback on each item
* @param {Function} callback The callback function to run
*/
Constructor.prototype.each = function (callback) {
if (!callback || typeof callback !== 'function') return;
for (var i = 0; i < this.elems.length; i++) {
callback(this.elems[i], i);
}
return this;
};
/**
*
* @param {String} className
*/
Constructor.prototype.register = function (className) {
this.each(function (item) {
customElements.define(item, className);
});
return this;
};
/**
* Instantiate a new constructor
*/
var instantiate = function (selector) {
return new Constructor(selector);
};
/**
* Return the constructor instantiation
*/
return instantiate;
})();
Ω('lol-foo').register(button);
<p>Expect a button down below</p>
<lol-foo>Hey</lol-foo>
您的帮助将有所帮助custags.js帮助添加一个像 jQuery($) 这样的选择器。感谢回答。
最佳答案
问题是因为您向 define()
的第一个参数提供了一个 HTMLElement 对象,而它期望自定义元素 name 是一个字符串。作为引用,此名称必须包含一个连字符,并且是小写的。因此试试这个:
customElements.define(item.tagName.toLowerCase(), className);
这是一个工作示例:
class button extends HTMLElement {
constructor() {
super();
const shadow = this.attachShadow({
mode: 'open'
});
const button = document.createElement('button');
button.style.cssText = 'display:block';
button.textContent = super.textContent;
shadow.appendChild(button);
}
}
var Ω = (function() {
'use strict';
/**
* Create the constructor
* @param {String} selector The selector to use
*/
var Constructor = function(selector) {
if (!selector) return;
if (selector === 'document') {
this.elems = [document];
} else if (selector === 'window') {
this.elems = [window];
} else {
this.elems = document.querySelectorAll(selector);
}
};
/**
* Run a callback on each item
* @param {Function} callback The callback function to run
*/
Constructor.prototype.each = function(callback) {
if (!callback || typeof callback !== 'function') return;
for (var i = 0; i < this.elems.length; i++) {
callback(this.elems[i], i);
}
return this;
};
/**
*
* @param {String} className
*/
Constructor.prototype.register = function(className) {
this.each(function(item) {
customElements.define(item.tagName.toLowerCase(), className);
});
return this;
};
/**
* Instantiate a new constructor
*/
var instantiate = function(selector) {
return new Constructor(selector);
};
/**
* Return the constructor instantiation
*/
return instantiate;
})();
Ω('lol-foo').register(button);
<p>Expect a button down below</p>
<lol-foo>Hey</lol-foo>
还值得注意的是,define()
的第二个参数是类构造函数,因此 className
的参数名称用词不当。不过,它的值在此示例中是正确的。
您可以在 CustomElementRegistry.define()
at MDN 上找到更多信息
关于javascript - 未捕获的 DOMException : Failed to execute 'define' on 'CustomElementRegistry' : "[object HTMLElement]" is not a valid custom element name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58153829/
一旦我们调用了 window.open(...),我们如何让相同的自定义元素标签也能在新窗口中工作? 最佳答案 新窗口是一个新的上下文,这意味着它对打开者一无所知。 它有一个新的 window 对象,
我们正在使用 LitElement 构建自定义组件(非公开)。我们称之为 CompA 和 CompB。我们正在使用 CDN 发布包。 我们通过模块类型的 Script 标签在 HTML 中使用它。当每
在我的应用程序中,我想使用 ClarityIcons.add() 添加自定义图标。但是我收到以下错误: index.js:402 Uncaught DOMException: Failed to ex
我使用 Angular Elements 创建了两个自定义元素。 is defined in customtag1.js is defined in customtag2.js. I load
在我的应用程序中,我想使用 ClarityIcons.add() 添加自定义图标。但是我收到以下错误: index.js:402 Uncaught DOMException: Failed to ex
关闭。这个问题需要debugging details .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 3年前关闭。 社区在 6 个月前审查了是否重新打开此问题并将其
未捕获的 DOMException:无法在“CustomElementRegistry”上执行“定义”:此名称已用于此注册表 在 http://127.0.0.1:8000/components/@p
我不认为这是一个重复的问题。我只将 @polymer/polymer 作为依赖项安装并导入到我的供应商包中(没有 @polymer/paper-input)。我使用的是 v3.0.5,我什至没有在依赖
请帮助我,我不明白到底是什么导致了错误。代码:- class button extends HTMLElement{ constructor(){ super();
我是一名优秀的程序员,十分优秀!