В моем проекте Chessly.github.io я использую Настраиваемые встроенные элементы IMG для определения шахматных фигур SVG:
![](https://i.imgur.com/78cCT1i.jpg)
Вопрос: Как отличить обычное IMG от настроенного IMG?
document.body.append(
document.createElement("IMG", {
is: "white-queen"
});
);
Это создает шахматную фигуру , но не устанавливает атрибут is=
Теперь я сам явно установил атрибут is=
, но так как этот атрибут ничего не делает и может быть установлен на любое значение (я использую is
в качестве наблюдаемого атрибута в моем коде пользовательского элемента), это не надежный способ различать элементы IMGиз настраиваемых элементов IMG при ходьбе по DOM.
Если я продвигаю пешку (замените img src)
<img is=white-pawn/>
на element.setAttribute("is","white-queen")
Как я могу определить, что фигура изначально была белой пешкой?
Она по-прежнему остается белой пешкой в реестре пользовательских элементов.
Я что-то пропускаю?
Упрощенный код (сбазовая форма SVG) в JSFiddle: https://jsfiddle.net/dannye/k0va2j76/
Обновление: код (на основеправильный ответ ниже)
let isExtendedElement = x =>
Object.getPrototypeOf(x).__proto__.constructor.name !== 'HTMLElement';
примечание! Это НЕ ловит Автономные Пользовательские элементы!
возможно лучше:
let isBaseElement = x =>
Object.getPrototypeOf(Object.getPrototypeOf(x)).__proto__.constructor.name=='Element';