Используйте JQuery для создания привязки

Я хочу использовать jquery для сборки HTML следующим образом:

<li><a href="#"><span class="play"></span><span class="trackName">Track Name</span></a></li>

Кажется простым, но я не могу понять, как включить теги HTML как часть моего якорного текста.

Если я использую что-то вроде:

$("<a />", { text: $('<SPAN class="play" />') + "Track Name" })

тогда теги span будут экранированы.

Ответы

Ответ 1

Существует несколько способов сделать это, включая (но не ограничиваясь этим):

// one big string
$('<a href="#"><span class="play"></span><span class="trackName">Track Name</span></a>')

// create <a> then append() the span
$('<a></a>').attr("href","#")
            .append('<span class="play"></span><span class="trackName">Track Name</span>');

// create <a> then set all of its contents with html()
$('<a></a>').attr("href","#")
            .html('<span class="play"></span><span class="trackName">Track Name</span>');

// append spans created earlier:
var spans = $('<span class="play"></span><span class="trackName">Track Name</span>');
var a = $('<a></a>').append(spans);

Обратите внимание, что .html() заменяет любое существующее содержимое, а .append() добавляет к концу. Поэтому, учитывая, что у вас есть два элемента span в вашем примере, вы можете создавать их самостоятельно и добавлять их по одному за раз:

$('<a href="#"></a>').append('<span class="play"></span>')
                     .append('<span class="trackName">Track Name</span>');

Ответ 2

Отбросьте внутренний конструктор jQuery:

$("<a />", { text: '<SPAN class="play" /> Track Name' });

jsFiddle.

или, если вы хотите, чтобы код был HTML в ссылке:

$("<a />", { html: '<SPAN class="play" /> Track Name' });

Ответ 3

var link = $("<a>");
    link.attr("href","http://www.google.com");
    link.attr("title","Google.com");
    link.text("Google");
    link.addClass("link");

Ответ 4

//overwrites the innerHTML of all anchors *selector must be changed to more specific
$('a').html('<span class="play"></span><span class="trackName">Track Name</span>');

//wraps existing text and prepends the new span
$('a').wrapInner('<span class="trackName">')
    .prepend('<span class="play"></span>');

http://jsfiddle.net/gaboesquivel/f2dcN/3/

Ответ 5

Это то, с чем я в конце концов пошел:

$('<a>', { className: 'trackName', href: contentPath + 'tracks/' + t.fileName } )
     .append('<span class="play" />')
     .append('<span class="trackName"></span>')
          .append(t.trackName)