如何传递包含单引号和双引号的字符串?

时间:2020-08-12 13:46:16

标签: javascript jquery

我有一个名为name的字符串变量。 name包含字符串14'6"。我正在尝试将name传递给函数。我正在尝试将onclick添加到这样的tablerow中:

$("#trID").attr('onclick', 'testFunction(' + name + ')');

我尝试使用转义字符来实现此目的,但是由于字符串包含单引号('和双引号("),因此我无法使用它。< / p>

有什么方法可以将字符串传递给函数,还是必须完全更改字符串?

谢谢!

3 个答案:

答案 0 :(得分:2)

要执行所需的操作,您需要对name字符串中的单引号/双引号进行转义。为此,您可以使用正则表达式:

name = name.replace(/([\""|\''])/g, '\\$1');
$("#trID").attr('onclick', 'testFunction(' + name + ')');

但是应该注意的是,使用内联事件处理程序,即您示例中的onclick属性不是一个好习惯。您应该改用低调的事件处理程序。

您已经在页面中包含了jQuery,可以通过事件处理程序和data属性来实现,如下所示:

let $div = $("#trID").on('click', function() {
  console.log($(this).data('foo'));
});

$('button').on('click', function() {
  $div.data('foo', (new Date()).getTime());
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="trID" data-foo="14'6"">Click me to display value</div>
<button>Click me to change value</button>

答案 1 :(得分:0)

尝试使用javascript的字符串模板

$("#trID").attr('onclick', `testFunction(${name})`);

答案 2 :(得分:0)

您可以使用JSON作为代理,因为其数组语法基于JavaScript,JSON.stringify()可以处理JSON片段(例如独立字符串):

function testFunction(param){
    console.log(param);
}
var rawName = "one\n\"two\"\n'three'\nfour";
var encodedName = JSON.stringify(rawName);
console.log(rawName, encodedName);
$("#trID").attr('onclick', 'testFunction(' + encodedName + ')');
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button id="trID">Click Me!</button>

无论如何,值得注意的是,您一开始就不需要它。动态生成的代码很难。由于您使用的是jQuery,因此更简洁的方法是:

function testFunction(param){
    console.log(param);
}
var name = "one\n\"two\"\n'three'\nfour";
$("#trID").on('click', function() {
    testFunction(name);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button id="trID">Click Me!</button>