2016-07-25 44 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){}'。感谢您的链接 –