2010-10-22 18 views
10

Tek bir alıntı içeren öznitelik değerini ayarlamak çalışıyorum: AncakHTML öznitelik değerleri içinde tek/çift tırnaklara izin var mı?

var attr_value = "It's not working"; 
var html = "<label my_attr='" + attr_value + "'>Text</label>"; 
$('body').html(html); 

, aşağıdaki sonuç elde edersiniz:

<label working="" not="" s="" my_attr="It">Text</label> 

nasıl çözeriz diye?

Öznitelik değerlerinin içinde çift tırnak var mı? nitelik ayırıcı olarak

cevap

17

Evet, ikisi tırnak özellik değerlerinin izin verilir, ancak bir özellik değeri ayırıcı olarak kullandığınız alıntı yanı sıra diğer HTML-özel karakterler HTML-kaçış gerekir gibi < ve &:

function encodeHTML(s) { 
    return s.split('&').join('&amp;').split('<').join('&lt;').split('"').join('&quot;').split("'").join('&#39;'); 
} 

var html= '<label my_attr="'+encodeHTML(attr_value)+'">Text</label>'; 

Ancak, genellikle HTML dizeleri bir araya belgeyi girmeye çalışmak değil daha iyi uzakta. Her zaman kaçmayı unuttuğunuzda hatalar ve HTML-enjeksiyonu (siteler arası güvenlik açıklarına yol açar) riskiyle karşı karşıyasınız. Tersbölüleri

$('body').append(
    $('<label>', {my_attr: attr_value, text: 'Text'}) 
); 
+0

Detaylı bir cevap için çok teşekkürler! Sadece "encodeHTML" in uygulanmasıyla ilgili merak için: 'replace' işlevini kullanarak uygulanabilir, değil mi? Daha az etkili midir? –

+0

Bu, '/ (/ &/g,' & ') ... 'değiştirebilir. Bu durumda, arama dizgileri herhangi bir regex-özel karakter içermediğinden önemli değildir, ancak genel olarak düz string-replace 'split' /' join' için daha basit olabilir, çünkü arama dizelerini kullanmadan regex kaçan hakkında endişeleniyorum. Karşılaştırmalı performans tarayıcılarda farklılık gösterir. – bobince

+0

Teşekkürler! Bana "inşaat kısayolu" öğreticisine bir işaretçi verebilir misiniz? –

2
var attr_value = "It&#39;s not working" 
2

kullanın çift tırnak:

var html = "<label my_attr=\"" + attr_value + "\">Text</label>"; 
8

Sen çift tırnak veya tek tırnak içine çift tırnak içine tek tırnak kullanabilirsiniz. Tek tırnak içinde tek tırnak veya çift tırnak içinde çift tırnak kullanmak istiyorsanız, bunları HTML kodlamak zorundasınız.

Geçerli işaretleme:

<label attr="This 'works'!" /> 
<label attr='This "works" too' /> 
<label attr="This does NOT \"work\"" /> 
<label attr="And this is &quot;OK&quot;, too" /> 
+0

biri çalışmaz: Bunun yerine, attr(), text() gibi DOM tarzı yöntem ve inşaat kısayolunu kullanın. Bu bir JavaScript kaçışı değil, HTML. – bobince

+0

Haklısınız, cevabımı düzenledim ve kaçan kişiyi sildim. – CodeTwice

+0

Sadece "

İlgili konular