2014-01-27 213 views
5

我有一個問題,當我用JavaScript開發我的HTML。如何在jquery的append(),onclick(),alert()中同時轉義單引號或雙引號?

什麼最後我想在HTML是:

<div id="test"> 
<div onclick="alert("it's a test.")">Show</div> 
</div> 

但在代碼中,我希望它能夠實現這樣的:

<div id="test"></div> 
<script> 
var tmp="it's a test.";//be careful, there must be a single quote in this variable 
$('#test').append("<div onclick='alert(\" "+tmp+" \")'>Show</div>"); 
</script> 

在Firebug它表明:

<div id="test"> 
<div ")'="" test.="" a="" s="" onclick="alert(" it">Show</div> 
</div> 

所以我認爲這是一個逃避的問題。但我認爲它至少有3個深度。 任何人都可以幫助我?謝謝!

+0

爲什麼'的onclick = ...'當你使用jQuery? –

+0

因爲這段代碼處於for循環。所以這個頁面中的代碼是完全動態的。 – Luc

+0

然後你使用閉包! –

回答

3

不要使用jQuery來編寫內聯腳本。更換

$('#test').append("<div onclick='alert(\" "+tmp+" \")'>Show</div>"); 

$('<div>').click(function(){ alert(" "+tmp+" ") }).text('Show').appendTo('#test'); 

這樣

  • 你不EVAL上點擊代碼
  • 語法錯誤direcly檢測
  • 你不會有報價逃跑問題
  • 代碼更易讀
  • 你就會有一個直接結合,沒有無用的選擇分辨率
  • 當你需要一個變量(例如temp),你不需要把它在全球範圍內,就可以是在元素的添加

的範圍要回答在評論你的問題,你可以

例子:

var names = ['A', 'B']; 
for (var i=0; i<names.length; i++) { 
    $('<div>').text('link '+(i+1)).click(names[i], function(e) { 
    alert('Name : ' + e.data); 
    }).appendTo(document.body); 
} 

Demonstration

+0

但是如果這個塊在一個數組的循環中,而變量temp取決於arry中的變量呢? – Luc

+0

@Luc然後使用中間關閉來保護它。它將*仍然*比使用字符串文字編寫的代碼更清潔。 –

+0

@Luc我編輯了兩種方式來處理循環問題 –

1

更簡單的方法是將新div附加到#test然後使用事件委託綁定點擊事件新添加的div像這個:

$('#test').append("<div class='newDiv'>Show</div>"); 

$('#test').on('click','.newDiv',function() { 
    alert("it's a test."); 
}); 
1

個反斜線可用於轉義特殊字符

<div id="test"></div> 
<script> 
var tmp=\"it's a test.\";//be careful, there must be a single quote in this variable 
$('#test').append("<div onclick='alert(\" "+tmp+" \")'>Show</div>"); 
</script> 

這應該有希望的工作,如果沒有它應該幫助您開始