{"id":829,"date":"2025-06-18T22:58:45","date_gmt":"2025-06-18T13:58:45","guid":{"rendered":"https:\/\/deskplate.net\/blog\/?p=829"},"modified":"2025-06-18T22:59:21","modified_gmt":"2025-06-18T13:59:21","slug":"javascript-%e9%8a%98%e6%9f%84%e3%82%b3%e3%83%bc%e3%83%89%e3%81%a7%e3%83%aa%e3%83%b3%e3%82%af","status":"publish","type":"post","link":"https:\/\/deskplate.net\/blog\/archives\/829","title":{"rendered":"JavaScript \u9298\u67c4\u30b3\u30fc\u30c9\u3067\u30ea\u30f3\u30af"},"content":{"rendered":"<pre>\r\ndocument.addEventListener(\"DOMContentLoaded\", function () {\r\n  const target = document.getElementById(\"body\"); \/\/ PukiWiki\u672c\u6587\r\n  if (!target) return;\r\n\r\n  const walker = document.createTreeWalker(\r\n    target,\r\n    NodeFilter.SHOW_TEXT,\r\n    {\r\n      acceptNode: function (node) {\r\n        if (\r\n          node.parentNode &&\r\n          ['SCRIPT', 'STYLE', 'A'].includes(node.parentNode.nodeName)\r\n        ) {\r\n          return NodeFilter.FILTER_REJECT;\r\n        }\r\n        return NodeFilter.FILTER_ACCEPT;\r\n      }\r\n    }\r\n  );\r\n\r\n  const regex = \/([a-zA-Z0-9]{4})\/g;\r\n  const nodesToReplace = [];\r\n\r\n  let node;\r\n  while ((node = walker.nextNode())) {\r\n    if (regex.test(node.nodeValue)) {\r\n      nodesToReplace.push(node);\r\n    }\r\n  }\r\n\r\n  for (const node of nodesToReplace) {\r\n    const text = node.nodeValue;\r\n    const frag = document.createDocumentFragment();\r\n    let lastIndex = 0;\r\n\r\n    text.replace(regex, (match, code, index) => {\r\n      frag.appendChild(document.createTextNode(text.slice(lastIndex, index)));\r\n\r\n      const before = text[index - 1];\r\n      const after = text[index + 4];\r\n      const isValidSurrounding =\r\n        (!before || !\/[a-zA-Z0-9]\/.test(before)) &&\r\n        (!after || !\/[a-zA-Z0-9]\/.test(after));\r\n\r\n      const isNotAllLetters = !\/^[a-zA-Z]{4}$\/.test(code); \/\/ \u2190 \u3053\u3053\u3067\u5168\u82f1\u5b57\u304b\u30c1\u30a7\u30c3\u30af\r\n\r\n      if (isValidSurrounding && isNotAllLetters) {\r\n        const a = document.createElement(\"a\");\r\n        a.href = `https:\/\/finance.yahoo.co.jp\/quote\/${code}.T`;\r\n        a.textContent = code;\r\n        a.target = \"_blank\";\r\n        a.rel = \"noopener noreferrer\";\r\n        frag.appendChild(a);\r\n      } else {\r\n        frag.appendChild(document.createTextNode(code));\r\n      }\r\n\r\n      lastIndex = index + 4;\r\n    });\r\n\r\n    frag.appendChild(document.createTextNode(text.slice(lastIndex)));\r\n    node.parentNode.replaceChild(frag, node);\r\n  }\r\n});\r\n<\/pre>\n<p><\/code><\/p>\n","protected":false},"excerpt":{"rendered":"<p>document.addEventLis<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[22],"tags":[],"class_list":["post-829","post","type-post","status-publish","format-standard","hentry","category-javascript"],"_links":{"self":[{"href":"https:\/\/deskplate.net\/blog\/wp-json\/wp\/v2\/posts\/829","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/deskplate.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/deskplate.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/deskplate.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/deskplate.net\/blog\/wp-json\/wp\/v2\/comments?post=829"}],"version-history":[{"count":3,"href":"https:\/\/deskplate.net\/blog\/wp-json\/wp\/v2\/posts\/829\/revisions"}],"predecessor-version":[{"id":832,"href":"https:\/\/deskplate.net\/blog\/wp-json\/wp\/v2\/posts\/829\/revisions\/832"}],"wp:attachment":[{"href":"https:\/\/deskplate.net\/blog\/wp-json\/wp\/v2\/media?parent=829"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/deskplate.net\/blog\/wp-json\/wp\/v2\/categories?post=829"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/deskplate.net\/blog\/wp-json\/wp\/v2\/tags?post=829"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}