2016-07-25 3 views
1

Можете ли вы рассказать мне, как удалить символ @ из этого тега span без изменения всех дочерних html (ов)?Изменить текст .text() и сохранить дочерний html

$('button').click(function() { 
 
    // ... 
 
});
#name { 
 
    background-color: #ccc 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<span> 
 
    <span id="name"> 
 
    <a href="#">Harry</a> 
 
    </span> 
 
    
 
    says: Hello @<span id="name"> 
 
    <a href="#">Hermione</a> 
 
    </span> 
 
</span><br /> 
 

 
<button>Remove</button>

Моя идея: получить родительский .text(), разделенным характер @, переопределение родительского текста (parent.text('')) и добавьте 2 части к родителю. Но этот путь имеет большую проблему: все дочерние html (ы) не будут сохранены.

+4

Кроме :: Вы не можете дублировали идентификаторы ... ID должен быть уникальным – DaniP

+0

http://stackoverflow.com/questions/4106809/how-can-i -change-an-elements-text-without-change-its-child-elements – lintu

ответ

2

Я добавил идентификатор внешнего <span> и дедуплицировал идентификаторы имен.

$('button').click(function() { 
 

 
    $('#outer').html($('#outer').html().replace(/@/,'')); 
 
    
 
});
#name { 
 
    background-color: #ccc 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<span id='outer'><span id="name"><a href="#">Harry</a></span> says: Hello @<span id="name2"><a href="#">Hermione</a></span></span> 
 

 
<br /> 
 

 
<button>Remove</button>

+0

Ответы на http://stackoverflow.com/questions/4106809/how-can-i-change-an-elements-text-without- вероятно, лучше меняются его элементы-потомки –

+0

Прошу прощения, могу ли я расширить свой вопрос? Пример: если в теге span у меня больше 1 символа '@', и я хочу удалить только один из них (предыдущее имя пользователя). Как я могу это сделать? –

+0

Возможно, отредактируйте вопрос, чтобы показать расширенный пример. А также объясните, как бы вы сказали разницу между именем @ перед именем пользователя и другим. Вероятно, для него существует регулярное выражение, если вы действительно можете четко описать разницу. –

2

Во-первых, вы должны изменить дубликат id атрибуты для классов, или удалить их полностью.

Чтобы решить вашу проблему, вы можете пройти через узлы, находящиеся на верхнем уровне span, и удалить любые символы @, которые отображаются в любом значении textNode. Попробуйте это:

$('button').click(function() { 
 
    $('body > span').contents().each(function() { 
 
    if (this.nodeType == 3) { 
 
     this.nodeValue = this.nodeValue.replace('@', ''); 
 
    } 
 
    }); 
 
});
#name { 
 
    background-color: #ccc 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<span> 
 
    <span class="name"> 
 
    <a href="#">Harry</a> 
 
    </span> says: Hello @<span class="name"> 
 
    <a href="#">Hermione</a> 
 
    </span> 
 
</span> 
 
<br /> 
 

 
<button>Remove</button>

+0

Спасибо! Небольшой вопрос: как узнать, что 'this.nodeType' - 3? –

+1

Здесь вы найдете: https://developer.mozilla.org/en/docs/Web/API/Node/nodeType. Вы можете заменить '3' на' Node.TEXT_NODE', однако он может не поддерживаться в старых браузерах. –

+0

... Im ищет что-то вроде 'var nodeType = ...; if (this.nodeType == nodeType) {} '. Спасибо за ссылку –