0

如果有办法用另一个简单的字符串替换一个简单的字符串,我正在尝试完成一项非常简单的任务。

我有一个页面的 HTML 源作为字符串。它包含几个内部锚点,例如 <a href="#about">、<a href="#contact">、<a href="#top">、<a href="#bottom">、<a href ="#who-we-are">等

所有的锚点都存储在一个数组中(['about','contact'],...),我需要删除每个出现的字符串,例如

href="#whatever"

(每次都有不同的东西)所以结果是 <a>

我对简单搜索和替换所做的是遍历我的数组并替换每次出现的

'href="'+锚点名+'"'

带有一个空字符串。但是经过多次尝试 string.replace() 我仍然没有找到实现这一目标的方法。


换句话说(也发布在评论中):提出我的问题的一个更简单的方法是:

假设我的字符串包含以下三个字符串

<a href="#contact"> <a href="#what"> <a href="#more">

如何使用 Javascript 用 <a> 替换它们(但不是任何具有相同模式的标签)?

4

5 回答 5

0

我不知道我是否理解这个问题,但你可以试试这个:

var index = myArray.indexOf('whatever');

myArray[index] = "whatever2"

于 2013-08-14T14:34:30.433 回答
0
All of the anchors are stored in an array (['about','contact'],...), and I need to remove every occurance of a string like href="#whatever" (where whatever is each time something different) so that the result is

为此,您可以执行以下操作:

var tets_array = $("a[href^='#']"); // select all a tags having href attr starting with #

然后取出数组并用你想要的进行修改。

于 2013-08-14T14:29:23.563 回答
0

如果我理解正确,那么您可以使用正则表达式替换所有这些。

var tagString = '<a href="#contact"> <a href="#what"> <a href="#more">';

// Find every occurrence which starts with '#' and ends with '"'
var regEx = new RegExp('#.*?"', 'g'); 

// Replace those occurrences with '"' to remove them
tagString = tagString.replace(regEx, '"');

编辑:

要替换数组中的特定标签,您可以执行以下操作:

var tags = ['<a href="#a">', '<a href="#b">', '<a href="#c">'];
var tagsToReplace = ['a', 'c'];

for (var i = 0, len = tags.length; i < len; i++) {
    var matches = tags[i].match(/#.*"/);
    if (matches === null) {
        continue;
    }

    var anchor = matches[0].substr(1).replace('"', ''); // Get only the anchor
    if (tagsToReplace.indexOf(anchor) !== -1) {
        tags[i] = tags[i].replace('#' + anchor, 'replaced');
    }
}
于 2013-08-14T15:11:06.107 回答
0

感谢所有的建议。我尝试了它们的各种变体,并注意到有些在 Firefox 中有效,但在 chrome 中无效,这导致我进入了这个线程

为什么javascript替换全局标志在Chrome或IE中不起作用,我该如何解决?

这使我找到了解决方案:

for (var i=0; i < myTags.length ; i++)
{
        var find = 'href="#' + myTags[i] + '"';
        var regex = new RegExp(find, 'gi');
        MyWholeString = MyWholeString.replace(regex, '');
}
于 2013-08-15T06:20:39.113 回答
0

一个具体的声明如下:

var mystring = '<a href="#thistag"> <a href="#thattag">';
var repstring = mystring;
var myarray = ['thistag', 'theothertag'];

for (var i = 0; i < myarray.length; i++) {
  var reptag = myarray[i];
  repstring = repstring.replace('a href="#' + reptag + '"', 'a');
}

然后repstring包含最终字符串。请注意交替的单引号和双引号字符,它们确保双引号作为 HTML 文本的一部分位于它们通常的位置。显然,您可以更改reptag(即 的内容myarray)以包含#字符,此时您将更改mystring.replace(...)要匹配的行。

于 2013-08-14T15:18:35.683 回答