提问者:小点点

如何获取所有文本元素并搜索[关闭]


我在一个文本元素中有项目的名称,我试图用一个文本框搜索一个特定的项目

<g id="items" class="item">
      <text id="text11374" x="103.8269" y="259.80652"><tspan id="tspan11372" fill="#1b1918" font-family="Arial" font-size="1.0583px" stroke-width=".070004">APPLE</tspan></text>
      <text id="text11378" x="89.974068" y="267.66498"><tspan id="tspan11376" fill="#1b1918" font-family="Arial" font-size="1.0583px" stroke-width=".070004">CARROT</tspan></text>
      <text id="text11382" x="103.1767" y="267.6218"><tspan id="tspan11380" fill="#1b1918" font-family="Arial" font-size="1.0583px" stroke-width=".070004">PINE APPLE</tspan></text>
      <text id="text11386" transform="rotate(-90)" x="-254.43674" y="70.620544"><tspan id="tspan11384" fill="#1b1918" font-family="Arial" font-size=".92604px" stroke-width=".070004">TOMATO</tspan></text>
      <text id="text11390" x="59.5481" y="251.54526"><tspan id="tspan11388" fill="#1b1918" font-family="Arial" font-size="1.0583px" stroke-width=".070004">BANANA</tspan></text>
      <text id="text11394" x="58.962337" y="244.31653"><tspan id="tspan11392" fill="#1b1918" font-family="Arial" font-size="1.0583px" stroke-width=".070004">BLUE BERRY</tspan></text>


共1个答案

匿名用户

“input”事件上触发一个函数,该函数搜索所有元素,并在textContent与输入值匹配时切换特定的类名:

null

const EL_find = document.querySelector("#find");
const ELS_text = document.querySelectorAll("svg text");

const findText = (ev) => {
  const val = ev.currentTarget.value.trim();
  ELS_text.forEach(el => {
    const hasText = new RegExp(val, "i").test(el.textContent);
    el.classList.toggle("is-found", val && hasText);
  });
};

EL_find.addEventListener("input", findText);
text {
  font: 30px arial, sans-serif;
  
  fill: #000;
  opacity: 0.2;
}

.is-found {
  fill: red;
  opacity: 1;
}
<input id="find" placeholder="Search...">
<br>

<svg version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg">
  <g>
    <text id="text11374" x="103" y="59"><tspan>APPLE</tspan></text>
    <text id="text11378" x="89" y="67"><tspan>CARROT</tspan></text>
    <text id="text11382" x="103" y="67"><tspan>PINE APPLE</tspan></text>
    <text id="text11386" x="154" y="70"><tspan>TOMATO</tspan></text>
    <text id="text11390" x="59" y="51"><tspan>BANANA</tspan></text>
    <text id="text11394" x="58" y="44"><tspan>BLUE BERRY</tspan></text>
  </g>
</svg>