繁体   English   中英

javascript在特定字符之前删除字符串

[英]javascript remove string before a specific character

我一直在寻找和寻找,但只能找到我的问题的变化......

我需要在字符前删除一个字符串(包括字符,以及字符前后的空格)。 字符串每次都会有所不同,并且不可预测,因此无论它是什么,都需要从DOM中删除。 所以,如果这是输出:

<h2>Birds - Norwegian Yellow Finch</h2>
<h2>Cats - Domestic Shorthaired Tabby</h2>
<h2>Dogs - Alaskan Husky Cross</h2>

如何删除“鸟 - 猫,狗 - 狗”? 并没有具体说明那些词(鸟类,猫,狗)因为那些会改变。 如果需要,短划线( - )可以是不同的字符(即:*)。

这是一个不使用正则表达式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。

您可以使用简单的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]);
}​

DEMO

以下循环遍历所有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()循环。

(如果将代码放在正文末尾的脚本块中,则不再需要文档就绪处理程序。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM