2016-07-25 49 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 ... ID必須是唯一的 – DaniP

+0

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

回答

2

我已向外部<span>添加了一個ID,並對您的名稱ID進行了重複數據刪除。

$('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

The answers at 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你可以用'Node.TEXT_NODE'替換'3',但是它可能在舊版瀏覽器中不支持。 –

+0

...我正在尋找類似'var nodeType = ...; if(this.nodeType == nodeType){}'。感謝您的鏈接 –