xiaohongshu
xiaohongshu
dom-apis
DOM manipulation and browser APIs including element selection, events, storage, fetch, and modern Web APIs.
Full skill instructions
// Modern (preferred)
document.querySelector('#id');
document.querySelector('.class');
document.querySelectorAll('div.item');
// Scoped
container.querySelector('.child');
// Cache references
const els = {
form: document.querySelector('#form'),
input: document.querySelector('#input'),
btn: document.querySelector('#btn')
};
// Safe text (XSS-safe)
el.textContent = userInput;
// Create elements (safest)
const div = document.createElement('div');
div.className = 'card';
div.textContent = title;
parent.appendChild(div);
// Batch updates (performance)
const fragment = document.createDocumentFragment();
items.forEach(item => {
const li = document.createElement('li');
li.textContent = item;
fragment.appendChild(li);
});
list.appendChild(fragment);
// Event delegation (best practice)
list.addEventListener('click', (e) => {
if (e.target.matches('.delete')) {
e.target.closest('li').remove();
}
});
// Options
el.addEventListener('click', handler, {
once: true, // Remove after first call
passive: true, // Never preventDefault
capture: false // Bubbling phase
});
// Cleanup with AbortController
const controller = new AbortController();
el.addEventListener('click', handler, { signal: controller.signal });
controller.abort(); // Remove listener
// LocalStorage (persistent)
localStorage.setItem('key', JSON.stringify(data));
const data = JSON.parse(localStorage.getItem('key'));
// SessionStorage (tab-only)
sessionStorage.setItem('token', value);
// Safe wrapper
const storage = {
get: (k, def = null) => {
try { return JSON.parse(localStorage.getItem(k)) ?? def; }
catch { return def; }
},
set: (k, v) => localStorage.setItem(k, JSON.stringify(v))
};
// GET
const res = await fetch('/api/data');
const data = await res.json();
// POST
await fetch('/api/data', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(data)
});
// With error handling
async function fetchJSON(url) {
const res = await fetch(url);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
return res.json();
}
// Intersection Observer (lazy loading)
const observer = new IntersectionObserver((entries) => {
entries.forEach(e => {
if (e.isIntersecting) {
e.target.src = e.target.dataset.src;
observer.unobserve(e.target);
}
});
});
document.querySelectorAll('img[data-src]').forEach(img => {
observer.observe(img);
});
// Clipboard
await navigator.clipboard.writeText(text);
// Geolocation
navigator.geolocation.getCurrentPosition(
pos => console.log(pos.coords),
err => console.error(err)
);
| Problem | Symptom | Fix |
|---|---|---|
| Element not found | null returned | Check if DOM loaded |
| Event not firing | Handler not called | Verify selector/delegation |
| XSS vulnerability | Script execution | Use textContent |
| Memory leak | Growing memory | Remove listeners |
// 1. Verify element exists
const el = document.querySelector('#id');
console.assert(el, 'Element not found');
// 2. Check event target
el.addEventListener('click', (e) => {
console.log('target:', e.target);
console.log('currentTarget:', e.currentTarget);
});
// 3. Monitor DOM changes
new MutationObserver(console.log)
.observe(el, { childList: true, subtree: true });
form.addEventListener('submit', async (e) => {
e.preventDefault();
const data = Object.fromEntries(new FormData(form));
try {
btn.disabled = true;
await submitData(data);
form.reset();
} catch (err) {
showError(err.message);
} finally {
btn.disabled = false;
}
});
const debouncedSearch = debounce(async (query) => {
const results = await search(query);
renderResults(results);
}, 300);
input.addEventListener('input', (e) => {
debouncedSearch(e.target.value);
});
xiaohongshu
technical spec
product ux expert
database patterns
Conduct multi-agent task orchestration and workflow coordination.
Initialize project with Conductor artifacts (product definition,
Expert in web animations, transitions, and motion design using Framer Motion and CSS
Creates Mermaid and ASCII diagrams for flowcharts, architecture, ERDs, state machines, mindmaps, and more. Use when user mentions diagram, flowchart, mermaid, ASCII diagram, text diagram, terminal diagram, visualize, C4, mindmap, architecture diagram, sequence diagram, ERD, or needs visual docume...
PostgreSQL bindings for H3 hexagonal grid system. Use when working with H3 cells in Postgres, including spatial indexing, geometry/geography integration, and raster analysis.
Context-Driven Development skill for projects using Conductor. Use this skill when you detect a `conductor/` directory in the project, when working on tasks defined in a `plan.md` file, or when the user asks about tracks, specs, or plans. Automatically applies TDD workflow, tracks task completion...
Display project status, active tracks, and next actions
Official Stakpak application containerization standard operating procedure, a step-by-step guidline to properly dockerize applications. This is a rule book curated by the Stakpak Team.
Generate, edit, and beat-sync AI video with leading models in one workspace.
The world's fastest calendar for remote work
Transform Your Design with AI Designer by ImgCreator.ai
Revolutionizing Video Production with AI-Powered Creativity
Extend an image past the frame and let AI fill the new aspect ratio.
Discover your celebrity doppelgänger with StarByFace!
ChainClarity explains 700+ crypto whitepapers in plain English, with layered summaries, comparisons, research tools, alerts, and a $4.99 Pro plan.
Opus.ai: Revolutionize Your Web Experience