slot.js 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. export function getInnerHTML(slot) {
  2. const nodes = slot.assignedNodes({ flatten: true });
  3. let html = '';
  4. [...nodes].map(node => {
  5. if (node.nodeType === Node.ELEMENT_NODE) {
  6. html += node.outerHTML;
  7. }
  8. if (node.nodeType === Node.TEXT_NODE) {
  9. html += node.textContent;
  10. }
  11. });
  12. return html;
  13. }
  14. export function getTextContent(slot) {
  15. const nodes = slot ? slot.assignedNodes({ flatten: true }) : [];
  16. let text = '';
  17. [...nodes].map(node => {
  18. if (node.nodeType === Node.TEXT_NODE) {
  19. text += node.textContent;
  20. }
  21. });
  22. return text;
  23. }
  24. export function hasSlot(el, name) {
  25. if (name) {
  26. return el.querySelector(`[slot="${name}"]`) !== null;
  27. }
  28. return [...el.childNodes].some(node => {
  29. if (node.nodeType === node.TEXT_NODE && node.textContent.trim() !== '') {
  30. return true;
  31. }
  32. if (node.nodeType === node.ELEMENT_NODE) {
  33. const el = node;
  34. if (!el.hasAttribute('slot')) {
  35. return true;
  36. }
  37. }
  38. return false;
  39. });
  40. }