当前位置: 首页 > 知识库问答 >
问题:

在Vaadin中以文本形式获取元素SVG子元素

殷建弼
2023-03-14

我在一个具有特定ID的div中使用javascript创建了一个SVG元素。我的主要目标是获得SVG图像,让用户下载它。

因此,我的想法可能是绝对错误的,是使用容器访问Div元素(我使用的是Vaadin23)。getElement(),获取子元素,这是我的SVG,然后执行svgElement。getOuterHTML()以获取字符串并将其保存到某个位置。我可以看到元素,我知道它在那里,但当我从vaadin打印容器元素时,它没有任何子元素。

我的情况:

<div class="chart-container" id="chart-div-02250ca9-3b1b-4d09-aeb2-f38c4c797fc9">
    <div>
        <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" role="group" style="width: 100%; height: 100%; overflow: visible;">
        ...
        </svg>
    </div>
</div>

我从内容中得到什么.getElement().getOuterHTML(),其中内容是我的DIV,ID:

<div id="chart-div-02250ca9-3b1b-4d09-aeb2-f38c4c797fc9" class="chart-container">
</div>

我错过了什么?

如果这是预期的行为,您将如何获取SVG元素?我尝试使用JS,然后将结果重估为Java,但这对Futures和所有同步的东西来说都是一团糟。

共有1个答案

桂智志
2023-03-14

Vaadin不会自动将客户端用JavaScript创建的子元素或模板内容同步到服务器。这仅仅是因为从性能的角度来看,添加这样的实现确实是有问题的,尽管这是很少需要的。

您可以做的是将组件实现为LitTemplate。它允许您使用@Id注释从模板中注入所选元素

@JsModule("./my-template.ts")
@Tag("my-template")
public class MyTemplate extends LitTemplate {

@Id("svg")
Element svgElement;

...
}

而“前端/my-template.ts”类似于

import { html, LitElement } from 'lit';
import { customElement } from 'lit/decorators.js';

@customElement('my-template')
export class MyTemplate extends LitElement {

render() {
   return html`
<div class="chart-container" id="chart-div-02250ca9-3b1b-4d09-aeb2-f38c4c797fc9">
    <div>
        <svg id="svg" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" role="group" style="width: 100%; height: 100%; overflow: visible;">
        ...
        </svg>
    </div>
</div>';
}
}

但是请注意,Vaadin中没有对Svg元素的更深入的支持,所以我不确定你能用它实现什么。

所以最终的问题是,你为什么需要它?这个问题的答案可能会为你揭示其他的途径。

 类似资料:
  • 我正在浏览一个包含几个元素的网页,我想在不包含其子元素的情况下获取其中的文本。 页面结构如下: 当我使用时,得到的结果是: 我正在使用BeautifulSoup4和Python3

  • 问题内容: This is some text 获得“这是一些”并非易事。例如,返回“ This is some text”: 通常,如何获得特定元素的文本而不包含其子元素的文本? (我在下面提供了一个答案,但是如果有人想出一个不太丑陋的解决方案,它将让问题悬而未决)。 问题答案: 这是一个常规解决方案: 传递给函数的元素可以是从方法中获得的东西(即它可以是一个对象)。 或者,如果您没有jQuer

  • (我在下面给出了一个答案,但如果有人能想出一个不那么可怕的解决方案,我会保留这个问题)。

  • 我在这里遇到了一个大麻烦。svg元素的textPath标记中有一些文本需要翻转180度。我已经使用了所有可以与css一起工作的方法,但绝对没有一种方法起作用。有人能帮我翻转元素中的文本吗。 null null

  • 问题内容: 是否可以仅从父元素而不是Selenium中的子元素获取文本? 示例:假设我有以下代码: 用C#(或任何语言),我将有: 但是,链接文本将带有“ Google Link此链接会将您带到Google主页”。 如果不进行大量的字符串操作(例如获取所有子项的文本并从父项的结果文本中减去该文本),是否有办法从父项元素中仅获取文本? 问题答案: 这是一个常见的问题,因为您无法直接访问文本节点- 换