1

追加する前にエスケープするにはどうすればよいですか? 以下は誤って追加されます

'<a here."="" goes="" string"="" title="Some " href="#">Hello</a>'

コードで:

$(function(){
    var t='Some "string" goes here.';
    var jqueryObj=$('#elem');
    jqueryObj.append('<a href="#" title="'+t+'">Hello</a>');
});

編集後の改訂コード

var $accounts=$('#accountList');
$accounts.find('li.accountList').remove();
for (var i = 1; i < data.o.a.length; i++) {
    $accounts.append('<li class="item displayAccount">'
    +'<input type="checkbox" checked="checked" class="cb" name="accounts[]" value="'+i+'" />'
    +'<span class="name">'+data.o.a[i].name
      +((data.o.a[i].e.length)?' <a class="displayError" href="#" title="'+escape(mkList(data.o.a[i].e))+'">Error</a>':null)
    +'</span>'
    +'</li>');
}
if(data.o.a[0].c.length) {$accounts.append('<li class="item displayAccount"><input type="checkbox" disabled="disabled" value="0"><span class="name">UNASSIGNED</span></li>');}
$accounts.find('a.displayError').displayError();
4

2 に答える 2

6

jQuery には、要素を安全に作成するための優れた構文があります。

$('<a>', {
    href: '#',
    title: t,
    text: 'Hello'  // Replace `text` with `html` if you need to.
}).appendTo(jqueryObj);

あなたのコードは文字列に大きく依存しているので、できる限りのことをしましたが、もっときれいにすることができました:

for (var i = 1; i < data.o.a.length; i++) {
    var $li = $('<li class="item displayAccount"></li>');
    var $input = $('<input type="checkbox" checked="checked" class="cb" name="accounts[]" />').val(i).appendTo($li);
    var $span = $('<span class="name"></span>').appendTo($li);

    if (data.o.a[i].e.length) {
        $('<a class="displayError" href="#">Error</a>').attr('title', mkList(data.o.a[i].e)).appendTo($span);
    }

    $li.appendTo($accounts);
}
于 2012-10-14T19:46:55.250 に答える
2

その方法を使いたくない場合に備えて、Blenderとは異なる答えを提供すると思いました。

function escapeQuotes(str){
    return str.replace(/"/g, '&quot;');
}

二重引用符を。に置き換えます&quot;

于 2012-10-14T19:53:31.360 に答える