【问题标题】:How to click svg using querySelector?如何使用 querySelector 点击 svg?
【发布时间】:2021-05-22 05:49:28
【问题描述】:

我正在尝试使用以下命令构建一个 chrome 扩展程序来单击网页上的 SVG,但它显示“单击”不是一个函数。

谁能给我一些指导以解决这个问题?

document.querySelector("div[class^='SubmitChat__SubmitButton']").querySelector("svg > path(0)").click();
<form class="SubmitChat__SubmitChatWrapper-kLTVjd ezNulO">

  <div id="PinToTop" style="display: none; border: groove; margin: 5px; padding: 5px;"></div>

  <div class="DefaultComments__DefaultCommentsWrapper-drohEF dbvkCO">

    <div class="SubmitChat__TextAreaWrapperBox-ijaLYA uQa-DJ">
      <textarea data-track-category="Interaction_Comment" data-track-action="click" data-track-name="field_comment" class="SubmitChat__TextAreaWrapper-cEDMAF joGtiU" style="height: 44px;"></textarea>
    </div>

    <div class="SubmitChat__SubmitButton-kXYuum kSQpDq">
      <span class="isvg loaded SubmitChat__SendMessageIcon-hzVurU lcJXRC">
                <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
                    <path d="M25.305 16.07L7.503 24.307a.802.802 0 01-1.111-.925l1.923-7.493h0L6.392 8.396a.8.8 0 011.111-.925l17.802 8.236a.2.2 0 010 .363zm-16.638-.181h16" fill="none" stroke="#28232D" stroke-linecap="round" stroke-width="1.5">
                    </path>
                </svg>
            </span>
    </div>
  </div>

</form>

【问题讨论】:

  • 基本调试。 Console.log 一切。另外,您确定单击事件已分配给 svg 路径吗?而不是&lt;span&gt;?

标签: javascript google-chrome-extension onclick click jquery-selectors


【解决方案1】:

您不能真正单击 svg 路径,但这里有一个解决方案:

const pathElem = document.querySelector("div[class^='SubmitChat__SubmitButton'] svg > path")

pathElem.onclick = () => console.log("clicked")

pathElem.dispatchEvent(new Event("click"))
pathElem.dispatchEvent(new Event("click"))
<form class="SubmitChat__SubmitChatWrapper-kLTVjd ezNulO">
    <div id="PinToTop" style="display: none; border: groove; margin: 5px; padding: 5px;"></div>
    <div class="DefaultComments__DefaultCommentsWrapper-drohEF dbvkCO">
        <div class="SubmitChat__TextAreaWrapperBox-ijaLYA uQa-DJ">
        <textarea data-track-category="Interaction_Comment" data-track-action="click" data-track-name="field_comment"  class="SubmitChat__TextAreaWrapper-cEDMAF joGtiU" style="height: 44px;"></textarea>
        </div>
        <div class="SubmitChat__SubmitButton-kXYuum kSQpDq">
            <span class="isvg loaded SubmitChat__SendMessageIcon-hzVurU lcJXRC">
                <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
                    <path d="M25.305 16.07L7.503 24.307a.802.802 0 01-1.111-.925l1.923-7.493h0L6.392 8.396a.8.8 0 011.111-.925l17.802 8.236a.2.2 0 010 .363zm-16.638-.181h16" fill="none" stroke="#28232D" stroke-linecap="round" stroke-width="1.5">
                    </path>
                </svg>
            </span>
        </div>
  </div>
</form>

请注意,.click() 适用于 HTML,但不适用于 SVG 元素。 MDN

另请注意,您的情况下的单击事件处理程序可能不是在侦听path 元素,而是侦听svgdivspan 标记。

【讨论】:

  • 我会添加 bubbles: true 以便事件向上传播。
猜你喜欢
  • 2017-06-20
  • 2012-10-06
  • 2017-05-26
  • 2017-10-16
  • 2019-08-31
  • 1970-01-01
  • 2019-07-09
  • 2013-06-16
  • 2014-04-20
相关资源
最近更新 更多