linkedom
Version:
A triple-linked lists based DOM implementation
49 lines (43 loc) • 1.06 kB
JavaScript
import {
CDATA_SECTION_NODE,
COMMENT_NODE,
DOCUMENT_NODE,
DOCUMENT_FRAGMENT_NODE,
TEXT_NODE,
NODE_END
} from './constants.js';
import {START, NEXT, PREV} from './symbols.js';
import {getEnd} from './utils.js';
export const isConnected = ({ownerDocument, parentNode}) => {
while (parentNode) {
if (parentNode === ownerDocument)
return true;
parentNode = parentNode.parentNode || parentNode.host;
}
return false;
};
export const parentElement = ({parentNode}) => {
if (parentNode) {
switch (parentNode.nodeType) {
case DOCUMENT_NODE:
case DOCUMENT_FRAGMENT_NODE:
return null;
}
}
return parentNode;
};
export const previousSibling = ({[PREV]: prev}) => {
switch (prev ? prev.nodeType : 0) {
case NODE_END:
return prev[START];
case TEXT_NODE:
case COMMENT_NODE:
case CDATA_SECTION_NODE:
return prev;
}
return null;
};
export const nextSibling = node => {
const next = getEnd(node)[NEXT];
return next && (next.nodeType === NODE_END ? null : next);
};