我一直在寻找和寻找,但只能找到我所拥有的问题的变体......
我需要在字符前删除一个字符串(包括字符,以及字符前后的空格)。字符串每次都会有所不同,并且不可预测,因此无论它是什么,都需要从DOM中删除。所以,如果这是输出:
<h2>Birds - Norwegian Yellow Finch</h2>
<h2>Cats - Domestic Shorthaired Tabby</h2>
<h2>Dogs - Alaskan Husky Cross</h2>
如何删除“Birds - ,Cats - ,Dogs - ”?并没有具体说明那些词(鸟类,猫,狗)因为那些会改变。如果需要,短划线( - )可以是不同的字符(即:*)。
答案 0 :(得分:1)
这是一个不使用正则表达式http://jsfiddle.net/46G5c/的解决方案:
$('h2').each(function() {
var h2 = $(this);
var text = h2.text();
var replacement = text.substr(text.indexOf('- ') + 2);
h2.text(replacement);
});
以下是使用正则表达式的表达式,根据您的数据http://jsfiddle.net/X3FTV/1/可能会有用,也可能不会更有用:
var regex = /^[^-]* - /;
$('h2').each(function() {
var h2 = $(this);
var text = h2.text();
h2.text(text.replace(regex, ''));
});
两者都使用jQuery,但应该直接改为普通的JavaScript。
答案 1 :(得分:1)
您可以使用简单的RegExp
来解决此问题。
<强> HTML:强>
<h2>Birds - Norwegian Yellow Finch</h2>
<h2>Cats - Domestic Shorthaired Tabby</h2>
<h2>Dogs - Alaskan Husky Cross</h2>
<强> JavaScript的:强>
var re = /^[^-]+-\s*/;
function processText(el) {
el.textContent = el.textContent.replace(re, '');
}
var elements = document.getElementsByTagName('h2');
for(var i = 0, l = elements.length; i < l; i++) {
processText(elements[i]);
}
答案 2 :(得分:1)
以下循环遍历所有h2元素并通过正则表达式替换删除开头:
window.onload = function() {
var h2s = document.getElementsByTagName("h2"),
i;
for (i=0; i < h2s.length; i++)
h2s[i].innerHTML = h2s[i].innerHTML.replace(/^[^-]+ - /,"");
};
演示:http://jsfiddle.net/nGfYd/5/
onload
处理程序确保代码在页面加载完成后运行,因为JavaScript在解析页面时遇到,但它只能操作已经解析过的元素。如果在相关元素之后的脚本块中包含代码,则不需要onload
处理程序,实际上我的偏好是将<script>
块放在正文之前的正文末尾关闭</body>
代码并且不使用onload
处理程序。
编辑:从其他答案下的评论看来,您似乎很乐意使用jQuery,在这种情况下您可以这样做:
$(document).ready(function(){
$("h2").text(function(i, oldVal) {
return oldVal.replace(/^[^-]+ - /,"");
});
});
演示:http://jsfiddle.net/nGfYd/7/
如果将函数传递给.text()
,jQuery将为每个元素调用该函数,并将元素的旧(当前)值传递给它,因此您也不需要.each()
循环。
(如果将代码放在正文末尾的脚本块中,则不需要文档就绪处理程序。)