Я пытаюсь использовать clone(), и я близок к этому, но я не могу заменить текст, он показывает оба:

var td_clone = $('.ms-vb').clone();
$('span', td_clone).remove();
$('br', td_clone).remove();
var name = $.trim(td_clone.text());
$("td").append(name.toUpperCase());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<table>
    <tr>
        <td width="80%" style="padding-bottom: 3px" class="ms-vb">
            <span class="ms-announcementtitle">
                title is here
            </span>
            <br>
            by hey
        </td>
    </tr>
</table>

Результат:

title is here 
by hey BY HEY

Пока я ожидаю:

title is here 
BY HEY

jsFiddle здесь

3
rob.m 29 Авг 2017 в 19:31

3 ответа

Лучший ответ

Вы делаете это неправильно, просто нацеливайтесь на textNode напрямую

var node = document.querySelector('.ms-vb br').nextSibling;

node.textContent = node.textContent.toUpperCase();
<table>
    <tr>
        <td width="80%" style="padding-bottom: 3px" class="ms-vb">
            <span class="ms-announcementtitle">
                title is here
            </span>
            <br>
            by hey
        </td>
    </tr>
</table>

Еще немного jQuery'ish - использовать contents(), который на самом деле возвращает узлы комментариев и текста, но в этом нет особой необходимости, когда простое решение JS очень простое, а версия jQuery содержит практически такой же код для настройки текста в любом случае

$('.ms-vb').contents().each(function() {
    if (this.nodeType === 3) 
        this.textContent = this.textContent.toUpperCase();
});
3
adeneo 29 Авг 2017 в 16:50

Сначала вам нужно удалить текст из td, вы можете сделать что-то вроде этого:

var td_clone = $('.ms-vb').clone();
var elements = $('.ms-vb').children();
$('span', td_clone).remove();
$('br', td_clone).remove();
$('.ms-vb').html('');
$('.ms-vb').append(elements);
var name = $.trim(td_clone.text());
$("td").append(name.toUpperCase());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<table>
    <tr>
        <td width="80%" style="padding-bottom: 3px" class="ms-vb">
            <span class="ms-announcementtitle">
                title is here
            </span>
            <br>
            by hey
        </td>
    </tr>
</table>
2
baranskistad 29 Авг 2017 в 16:41

Это должно сделать это

var td_clone = $('.ms-vb').clone();
console.log(td_clone);
$('span', td_clone).remove();
$('br', td_clone).remove();
var name = $.trim(td_clone.text());
$("td").append(name.toUpperCase());
0
Cesar Bielich 29 Авг 2017 в 16:38