我需要一些Regexp Javascript / JQuery的帮助。我得到了它的工作,但我认为有更好,更简单的解决方案。
想法是:
如果在button
点击,target
内部html在任何地方都有<b></b>
标记 - 请将其删除,否则在开头添加标记<b>
,在结尾添加</b>
。
这是代码:jsFiddle example
<input id="button" type="button" value="Bold it"/>
<div id="target">This is <b>sample</b> text</div>
$(function(){
$('#button').click(function(){
var t = $('#target');
//: search for '</b>' too ???
var isFound = t.html().search(new RegExp(/<b>/i));
if(isFound >= 0) //: make 2 replaces into 1 ???
t.html(t.html().replace(/<b>/,'').replace(/<\/b>/,''))
else
t.html('<b>'+t.html()+'</b>')
})
})
问题在代码中被注释:
如何搜索<b>
和</b>
在一个.replace(/<b>/,'').replace(/<\/b>/,'')
.replace(/<b>...?..../,'')
醇>
答案 0 :(得分:3)
这不是正则表达式有用的东西,因为表达式失败的方式有很多种。有关原因,请参阅RegEx match open tags except XHTML self-contained tags。
尝试使用t.children("b");
在您的代码中查找<b>...</b/>
的实例。
在这种情况下,请尝试以下操作:
t.children("b").each(function() {
var contents = $(this).contents();
$(this).replaceWith(contents);
});
或完全扩展:
$(function(){
$('#button').click(function(){
var t = $('#target');
t.children("b").each(function() {
var contents = $(this).contents();
$(this).replaceWith(contents);
});
});
});