javascript - 类似 .hasAttrAndValue() 的方法用于属性选择器

标签 javascript jquery attributes

给定情况:

$('#dbBoxNames > .names').each(function () {
    var boxName = $(this).attr('data-name');
    $('#boxList > .box[data-name="' + boxName + '"]').show();
});

我想更新多个 data-name 属性等于 boxName 变量的框。

boxName 值中包含双引号时,例如。 box1",jQuery (2.4) 抛出未捕获错误:语法错误,无法识别的表达式:.box[data-name="box1""]

使用属性数据选择器的重要性在于更简单的代码和更快的应用程序。 关于如何解决这个问题有什么想法吗? (必须使用属性数据选择器)

我正在寻找类似的东西:

$('.box').hasAttrAndVal('数据名称', boxName); 我想它不会再抛出同样的错误了。

以下内容将不起作用:

  • ' 替换为 ",反之亦然(boxName 可以包含单引号)。
  • 属性值周围不使用任何引号(boxName 可以包含空格)。
  • boxObj[0].hasAttribute("' + boxName + '");(有多个 .box 对象)

更新1

如果 boxName 仅包含单引号或双引号,则以下似乎可以解决问题:

$('#dbBoxNames > .names').each(function () {
    var boxName = $(this).attr('data-name');
    if (boxName.includes("'") && !boxName.includes('"'))
        $('#boxList > .box[data-name="' + boxName + '"]').show();
    if (!boxName.includes("'") && boxName.includes('"'))
        $("#boxList > .box[data-name='" + boxName + "']").show();
});

现在的问题是当boxName同时包含单引号和双引号时如何处理...

解决方案

显然我将通过将所有特殊字符从数据库转换为 html 代码来解决这个错误。 (后端不是我提供的,所以我一开始并没有想到这个想法)。

干杯

最佳答案

您可以使用JSON.stringify()来转义双引号:

var boxName = 'box1"';
boxName = JSON.stringify(boxName);
$('#boxList > .box[data-name=' + boxName + ']').show();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="boxList">
  <div style="display:none;" class="box" data-name='box1"'>Here I am!</div>
</div>

注意JSON.stringify() 还将返回的字符串括在双引号中。

关于javascript - 类似 .hasAttrAndValue() 的方法用于属性选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42282463/

相关文章:

jquery - 如何根据输入的总字符数在文本框中的字符后面插入空格,JQuery?

asp.net-mvc - 基于属性的Ajax请求错误处理? (值得吗?)

jquery - 如果子元素是 img,则将 rel 属性应用于 <a> - jquery

javascript - 根据其他选择使用 Javascript 更改 Select 标签

javascript - Ajax 请求获取/接收不完整的响应(限制?)

javascript - D3 中的选择,Jquery

javascript - 根据json填充select元素

javascript - jquery ui 对话框关闭后聚焦文本框

mysql - 从 Servlet 在 JSP 中显示数据表

javascript - Ti.App.fireEvent 不起作用;错误未捕获类型错误 : Cannot read property 'App' of undefined