用javascript抓取svg文本值

w3nuxt5m  于 2022-12-21  发布在  Java
关注(0)|答案(5)|浏览(507)

我有这个javascript...

window.writeText = function(form) {
  var text;
  form.catnumber2.value = "PING";
  text = document.getElementByName('cat2Number').innerHtml;
  return alert(text);
};

但我没有得到预期的警报框。
当我通过view/developer/view source查看源代码时,svg没有显示(我在chrome中),但当我使用view/developer/developer工具时,我可以看到下面的svg....

<svg height="594">
    <g ID="MasterG">
        <text name="cat2Number">"$1234"</text>
    </g>
</svg>

你知道我做错了什么吗?为什么我在“查看源代码”中看不到svg代码,但在“开发者工具”中却可以看到?这是我的问题的原因吗?这是我的警告框不能发出警告的原因吗?

5kgi1eie

5kgi1eie1#

经过几秒钟的谷歌搜索,找到了这个https://stackoverflow.com/a/9602772/1217408
我创建了这个使用textContent的JSFiddle示例:http://jsfiddle.net/hVyTJ/1/
原始的http://jsfiddle.net/hVyTJ/使用标准的DOM遍历从根SVG元素到达文本元素,而更新直接通过ID指向文本元素。
对于查找属性值,您可以使用getAttributeNS,如下所述:http://www.carto.net/svg/manipulating_svg_with_dom_ecmascript/
编辑:
正如Phrogz所指出的,一个简单的getAttribute调用通常就足够了,阅读评论了解更多细节。

0md85ypi

0md85ypi2#

可以调用text()来返回svg:text元素的文本内容。

// assume svgCont is an svg element
var label = svgCont.append("svg:text").text("hello, world!");

// print the text content to the console
console.log( label.text() );
x4shl7ld

x4shl7ld3#

不用再多说了:
获取SVG元素:

svg = document.getElementById("my_svg_id");

从SVG中获取内部文本:

var text = svg.textContent
xienkqul

xienkqul4#

只使用dom方法

const svg = document.querySelector(`[data-uuid="live_map_svg"]`);

const shape = svg.querySelector(`text`);

const text = shape.innerHTML;
// const text = shape.textContent;

setTimeout(() => {
  svg.insertAdjacentHTML(`beforebegin`, text);
}, 1000);
.svg-box{
 width: 500px;
 height: 500px;
 background: #ccc;
 color: red;
 font-size: 16px;
}

[data-uuid="live_map_svg"]{
  font-size: 16px;
}
<div class="svg-box">
  <svg
    data-uuid="live_map_svg" id="live_map_svg"
    width="100%" height="100%"
    viewBox="0 0 100 100"
    version="1.1"
    xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink">
    <text x="30" y="50" fill="#369acd">A Area</text>
  </svg>
</div>
ubby3x7f

ubby3x7f5#

对于只需要显示文本的用户,可以使用Selection API及其Range interface
简单地使用.textContent也会获取所有未显示的文本节点:

const svg = document.querySelector("svg");
console.log(svg.textContent);
<svg>  
  <defs>
    <desc>This text is not displayed, it shouldn't be grabbed</desc>
    <!-- same for all the new-lines in the markup -->
   </defs>
  <rect width="100%" height="100%" fill="red" />  

  <circle cx="150" cy="100" r="80" fill="green" />  

  <text x="150" y="125" font-size="60" text-anchor="middle" fill="white">SVG</text>  

</svg>

由于SVG元素没有innerText属性,因此我们需要遍历所有文本节点,并检查选择它们时是否得到BBox。
一个二个一个一个

相关问题