如何在javascript中转义撇号

How to escape the apostrophe in javascript

提问人:Nilanshu Vishesh 提问时间:6/20/2023 最后编辑:freedomn-mNilanshu Vishesh 更新时间:6/20/2023 访问量:92

问:

当我从带有撇号的下拉列表中选择一个名称时 示例: Brian O'Connar

我的 JS 代码将在撇号被删减后带来 Brian O 和其他角色。

我加载数据的原始JS代码 --

else if(newClaimCols[key]== "assigned_to_full_name_primary") {
  var selectedText =$("#claim" + newClaimCols[key] + "filter").val() 
  //Brian O

  if (selectedText!==null && selectedText!=="" ) {
    var temp1 = $("#claim" + newClaimCols[key] + "filter").val();
    for (var key in temp1) {
      temp.push(temp1[key]);
    }
  }
}

在上面的例子中,.val() 只选择撇号之前的文本

第2种情况 我尝试了 .text() 请参考以下代码

else if (newClaimCols[key] == "assigned_to_full_name_primary") {
  var selectedText = $("#claim" + newClaimCols[key] + "filter option:selected").text();//Brian O'Connar
  if (selectedText!==null && selectedText!=="" ) {
    var temp1 =$("#claim"+newClaimCols[key]+ "filter option:selected").text();
    temp.push(temp1);
  }
}

在这种情况下,我得到了 Brian O'Connar,但如果我在下拉列表中选择多个名字 Brian O'Connar 和 Nishinoya'O,它就像

示例: Brian O'ConnarNishinoya'O

不知道如何处理这个问题。

请让我知道当选择多个名称时,我如何才能完全加载带有撇号的名称或第二种情况 .text() 的解决方案。

javascript html dom jquery插件

评论

1赞 freedomn-m 6/20/2023
目前尚不清楚为什么你的第一个给出了截断的值 - 很可能你的 HTML 格式不正确。.val()
0赞 freedomn-m 6/20/2023
要从 .val() 中获取多个值 - 请参阅此答案<select multiple
0赞 freedomn-m 6/20/2023
在多个元素上使用(在您的例子中是多个)将始终将文本合并为单个文本。不要在多个元素上使用,除非你知道它的作用和原因。如果使用 则使用 来获取值。.text()<option>.text()option:selected.map
0赞 freedomn-m 6/20/2023
请提供足够的代码 (HTML) 以确定第一个问题的原因。 应该在数组中返回多个值。请参阅最小可重现示例.val()
1赞 Nilanshu Vishesh 6/20/2023
谢谢 stackoverflow.com/users/2181514/freedomn-m 我知道我的 HTML 是错误的,而不是 js

答:

0赞 CaptainObvious 6/20/2023 #1

要正确处理撇号并保留完整名称,您可以使用 JavaScript 的函数对所选文本进行编码,然后再将其推送到数组中。这将确保撇号(和任何其他特殊字符)被正确转义。通过使用 对所选文本进行编码,您可以安全地将其作为参数传递或将其存储在数组中,而不会出现任何问题。当您以后需要使用该值时,可以使用 对其进行解码。我将其添加到代码中,希望这能解决您的问题。encodeURIComponent()tempencodeURIComponent()decodeURIComponent()

else if (newClaimCols[key] == "assigned_to_full_name_primary") {
  var selectedText = $("#claim" + newClaimCols[key] + "filter option:selected").text();
  if (selectedText !== null && selectedText !== "") {
    var temp1 = $("#claim" + newClaimCols[key] + "filter option:selected").text();
    temp.push(temp1);
  }
}

评论

0赞 Nilanshu Vishesh 6/20/2023
var temp1 =$(“#claim”+newClaimCols[key]+ “filter option:selected”).text();这一行已经选择了带有转义字符的名称,但是当选择多个名称时,例如-Brian O'Connar和Nishinoya'Shoyo,那么结果将是Brian O'ConnarNishinoya'O,这是我提到的第二种情况,你有什么想法,我可以用空格或任何其他字符获得多个名字。
0赞 CaptainObvious 6/20/2023
在这种情况下,您可以直接将 temp1 值推送到 temp 数组中,而无需进行任何修改,并在我的初始响应中更新了代码
0赞 Nilanshu Vishesh 6/20/2023
temp1=Brian O'ConnarNishinoya'O 有两个名字合并在一起,我该如何拆分它??我需要两个名字分开,分别为 Brian O'Connar Nishinoya'O
0赞 CaptainObvious 6/20/2023
您是否尝试过使用分隔符?split()
0赞 Nilanshu Vishesh 6/20/2023 #2

我清理了我的 HTML 选项标签 由此

optstring += "<option value='" + key +'='+  val + "'>" +val+ "</option>";

对此

optstring += '<option value="' + key +'='+  val + '">' +val+ "</option>";

现在我从 html 到 JS 的值是接受撇号