2013-05-14 5 views
2

Я пытаюсь обернуть текст внутри тега <span>, используя jQuery. Код ниже не работает. Пожалуйста, укажите, где я ошибаюсь. Также предложите лучший/другой подход.Обтекать текст внутри тега html

var mysearch = '(05/13/2012-11/13/2012)'; 
$('table:eq(0) tr:eq(1) th:contains("' + mysearch + '")').filter(function() { 
    return this.html().replace('(05/13/2012-11/13/2012)', '<span class = "red"> (05/13/2012-11/13/2012)</span>'); 
}); 

Demo on jsFiddle

+0

вы можете сделать скрипку вашего вопроса –

ответ

1

Попробуйте это -

$('table:eq(0) th:contains("' + mysearch + '")').contents().wrapAll('<span class = "red"></span>'); 

Рабочая Демонстрационный -->http://jsfiddle.net/8kMqW/2/

+0

Спасибо и. Но я не вижу, чтобы текст был завернут в диапазон даже после применения ur-кода. – BumbleBee

+0

спасибо u. Я хочу, чтобы текст «mysearch» был обернут в не весь текст. – BumbleBee

5

this в вашем коде объект DOM элемента, который не имеет html метод, также вы дон Вам не нужен метод filter, вы можете использовать html met корыто.

$('table:eq(0) tr:eq(1) th:contains("' + mysearch + '")').html(function(_, html) { 
    return html.replace('(05/13/2012-11/13/2012)', '<span class="red"> (05/13/2012-11/13/2012)</span>'); 
}); 

Если содержание th равно mysearch строки, вы можете также использовать wrapInner метод:

$('table:eq(0) tr:eq(1) th').filter(function(){ 
    return $.trim($(this).text()) === mysearch; 
}).wrapInner('<span class="red"></span>'); 

JS Fiddle

+1

Удалил свой собственный ответ, так как я не заметил использования 'filter()' вместо 'html()' (и, улучшив мой ответ, обязательно будет плагиат (или, по крайней мере, * повторный *) ваш собственный) , Плюс-один вам, сэр! –

+0

Спасибо u. Но я не вижу, чтобы текст был завернут в диапазон даже после применения ur-кода. – BumbleBee

+0

@DavidThomas О, да, код OP использует метод 'filter', Спасибо. – undefined