MCPcopy Index your code
hub / github.com/Bistutu/FluentRead / parseDfs

Function parseDfs

userscripts.js:1870–1900  ·  view source on GitHub ↗
(node, respMap)

Source from the content-addressed store, hash-verified

1868
1869// read:递归提取节点文本
1870function parseDfs(node, respMap) {
1871 if (isEmpty(node)) return;
1872
1873 // console.log("当前节点:", node)
1874 switch (node.nodeType) {
1875 // 1、元素节点
1876 case Node.ELEMENT_NODE:
1877 // console.log("元素节点: ", node);
1878 // 根据 host 获取 skip 函数,判断是否需要跳过
1879 let skipFn = skipStringMap[url.host];
1880 if (skipFn && skipFn(node)) return;
1881 // aria 提示信息
1882 if (node.hasAttribute("aria-label")) processNode(node, textType.ariaLabel, respMap);
1883 // 按钮与文本域节点
1884 if (["input", "button", "textarea"].includes(node.tagName.toLowerCase())) {
1885 if (node.placeholder) processNode(node, textType.placeholder, respMap);
1886 if (node.value && (node.tagName.toLowerCase() === "button" || ["submit", "button"].includes(node.type))) processNode(node, textType.inputValue, respMap);
1887 }
1888 break;
1889 // 2、文本节点
1890 case Node.TEXT_NODE:
1891 let fn = adapterFnMap[url.host]; // 根据 host 获取 adapter 函数,判断是否需要特殊处理
1892 isEmpty(fn) ? processNode(node, textType.textContent, respMap) : fn(node, respMap);
1893 return; // 文本节点无子节点,return
1894 }
1895 let child = node.firstChild;
1896 while (child) {
1897 parseDfs(child, respMap);
1898 child = child.nextSibling;
1899 }
1900}
1901
1902function processNode(node, attr, respMap) {
1903 let text;

Callers 2

handleDOMUpdateFunction · 0.85
observeDOMFunction · 0.85

Calls 2

isEmptyFunction · 0.85
processNodeFunction · 0.85

Tested by

no test coverage detected