【问题标题】:How can I select an HTML element with an attribute having quotes in its value?如何选择具有在其值中包含引号的属性的 HTML 元素?
【发布时间】:2020-12-28 12:58:10
【问题描述】:

我有一个 HTML 元素,现在我必须使用 jQuery 或 javascript 使用 data 属性选择包含双引号或单引号的元素。

jQuery('.test-sp[data-value=""test"]').trigger('click');
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<span data-value=""test">Test lppp</span>

我的数据值是 "test。我需要使用 data 属性选择 div/span,该属性的值包含引号。

【问题讨论】:

  • That looks like invalid HTML to me。可能浏览器只会设置你并清空data-value 属性,并带有一些无效的test" suffix-attribute-leftover
  • 是的,这就像无效的 HTML。我只需要知道是否有任何选择 HTML 元素的方法。我得到这样的 HTML 输出。现在我需要触发这个元素
  • 您的选择器会起作用,也不会起作用。如果您使用document.querySelector('[data-value]') 选择您的元素,您实际上可以看到它是一个带有空data-value 和无效属性test" 的元素。该输出是错误的,需要纠正。否则,您必须使用 data-value 循环所有元素并对其外部 HTML 进行字符串比较或单独循环所有属性。

标签: javascript jquery double-quotes


【解决方案1】:

在字符串的 " 之前使用 \。

<span data-value="\"test">Test lppp</span>

【讨论】:

    【解决方案2】:

    您可以通过为元素指定特定的类或位置来使元素更加具体,并在 JavaScript 中搜索元素。您可以访问元素的数据集属性

    <ul>
      <li data-value="random">1</li>
      <li data-value="word">2</li>
      <li data-value="test">3</li>
    </ul>
    
    <script>
      // Or some other class to target them
      const elements = document.querySelectorAll('ul > li');
    
      for (let i = 0; i < elements.length; i += 1) {
        const el = elements[i];
        if (el.dataset.value === 'test') {
          // This is the element you are looking for!
        }
    
      }
    </script>
    

    【讨论】:

      【解决方案3】:

      我的数据值是“测试”。

      不是根据你的标记。

      <span data-value=""test">Test lppp</span>
      

      等同于:

      <span data-value="" test"="">Test lppp</span>
      

      您可以在 sn-p 中轻松检查自己:

      console.log(
          document.querySelector('[data-value]').outerHTML
      )
      &lt;span data-value=""test"&gt;Test lppp&lt;/span&gt;

      引号和双引号是独立属性上的无效字符。在继续之前,您应该 fix 您的标记。

      【讨论】:

        【解决方案4】:

        将 html 和 script 标签中 data-attribute 的值用单引号括起来。如果您使用单引号将值括起来,它将接受带引号的值。

        对于单击事件,您必须在脚本标记中使用反斜杠转义数据属性的值。

        我在脚本中使用一个变量从 span 标签中获取数据属性,它具有双引号的值,您也可以传递单引号。它正在工作。

        这是工作代码。

        var dattrvalue = $(".spn").attr("data-value");
        $("span[data-value='" + dattrvalue + "']").click(function(event) {
          $("#para").html("Hurray!");
        });
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
        <span class="spn" data-value='"test'>Click Me</span>
        
        <p id="para">This is a paragraph tag!</p>

        【讨论】:

        • &lt;span data-value=""test"&gt;Test lppp&lt;/span&gt; 这里我在双引号内使用引号。我收到错误 Uncaught Error: Syntax error, unrecognized expression: .test-sp[data-value=""test"]。我想用数据值“test.在数据动态值的情况下,我无法用单引号替换双引号。在某些情况下,单引号将代替双引号
        • 这里替换双引号的意思是当你动态绑定数据值时,你不必替换你的动态值。您需要使用单引号来绑定数据属性使用像 data-value='yourdynamicvalue' 这样的单引号和您动态获得的 yourdynamicvalue 不需要替换双引号它可以保持完全动态你得到的价值。示例&lt;span data-value='"test'&gt;Test lppp&lt;/span&gt; 检查我使用单引号来绑定数据属性。
        • 我无法预测 HTML 的输出,有时是单引号,有时是双引号。
        • 嘿@junu 我知道你无法预测输出。我分享的代码 sn-p 是处理动态值,其中它可以是单引号或双引号。我已经更新了我的代码并在脚本标记中使用了动态变量对于动态变量,您无需转义脚本单击事件中的值。您可以使用单引号更新 span 标签中的数据值,例如 &lt;span class="spn" data-value=''test'&gt;Click Me&lt;/span&gt; 两者都适用于点击事件。
        猜你喜欢
        • 1970-01-01
        • 2014-08-31
        • 2012-03-10
        • 1970-01-01
        • 1970-01-01
        • 2016-03-30
        • 1970-01-01
        • 2016-02-03
        • 1970-01-01
        相关资源
        最近更新 更多