【问题标题】:How to select href attribute from link using jquery?如何使用 jquery 从链接中选择 href 属性?
【发布时间】:2015-12-17 15:42:21
【问题描述】:

我有一个这样的字符串:

var str = 'anything <span><a href="http://www.example.com/classname/methodname/arg1/arg2" target="_blank">...www.example.com/clas</a> </span> anything';

我想要这个输出:

var newstr: 'anything http://www.example.com/classname/methodname/arg1/arg2 anything';

我该怎么做?实际上,我几乎可以使用多个str_replace() 来做到这一点。但我想知道如何使用正则表达式来做到这一点?

str.str_replace('<span><a href="', '');
str.str_replace('" target="_blank">', '');
str.str_replace('</a> </span> ', '');

// output:
anything http://www.example.com/classname/methodname/arg1/arg2...www.example.com/clas anything

嗯,如您所见,我无法在输出中删除 ...www.example.com/clas

注意:示例中的anything 可以是任何单词/句子。顺便说一句,实际上有波斯字符。


Edit1:这是一个例子:

我想替换这个:

This <span><a href="www.example.com/classname/methodname/arg1/arg2/" target = "_blank"> ... www.example.com/clas</a> </span> is very good.

有了这个:

This www.example.com/classname/methodname/arg1/arg2/ is very good.

Edit2:我还需要该链接的值。像这样的模式:

[LinkName](LinkAddress)

注意:如果该链接的值不是“无标题”,我只想创建上述模式。

示例 1:

var str = 'anything <span><a href="http://www.example.com/classname/methodname/arg1/arg2" target="_blank">website name</a> </span> anything';

我想要这个:

var newstr: 'anything [website name](http://www.example.com/classname/methodname/arg1/arg2 anything)';

示例 2:

var str = 'anything <span><a href="http://www.example.com/classname/methodname/arg1/arg2" target="_blank">untitled</a> </span> anything';

我想要这个:

var newstr: 'anything http://www.example.com/classname/methodname/arg1/arg2 anything';

【问题讨论】:

标签: javascript jquery regex


【解决方案1】:

您可以将str 包裹在DOM 元素中,找到任何锚标记,将其替换为自己的href 属性,然后返回新字符串:

var newStr = $('<div/>', {html: str}).find("a").replaceWith(function(){
  return $(this).attr('href'); // this.href would give absolute path
}).end().text();

var str = 'anything <span><a href="http://www.example.com/classname/methodname/arg1/arg2" target="_blank">...www.example.com/clas</a> </span> anything';

var newStr = $('<div/>', {html: str}).find("a").replaceWith(function(){
  return $(this).attr('href');
}).end().text();
console.log(newStr);
$('body').append(newStr);
&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"&gt;&lt;/script&gt;

【讨论】:

  • 嗯,我想弄清楚你做了什么,但我不能......你的选择器中的'&lt;div/&gt;' 是什么?我的字符串中没有任何&lt;div&gt; 标签...!我有&lt;span&gt;&lt;a&gt;
  • @stack 这将创建一个 DIV 元素,将其 innerHTML 设置为 str。然后你可以在上面使用任何 jq 方法
  • 看,我在我的网站中添加了一个新属性,现在在这种情况下我遇到了一个新问题。请您看看我的问题中的 Edit2 吗? (我最近编辑了我的问题)。我认为您可以简单地做到这一点..
  • 不,不,你必须在 SO 上发布一个新问题;)
  • 好的,我会写一个新问题,但是当我发布它时给你一个链接?其实我想看看的答案..
【解决方案2】:

如果您的文本总是变化,您应该坚持使用 Gen4tiks 的答案。 但是,如果您的句子规则始终与您在上面描述的方式相同,您可以使用here 解释的 regex.split 方法并定义一个适合您需要的正则表达式。以下是一个有效但非常愚蠢的正则表达式,可以满足您的需求,但对于任何其他用例都非常无用。我只是用它来解释如何使用正则表达式:

var split = str.split(split(/(<\/*[a-zA-Z0-9=\\]+>)|(href=")|(target)/)
//split: ["anything interesting ", "<span>", undefined, undefined, "<a ", undefined, "href="", undefined, "http://www.example.com/classname/methodname/arg1/arg2" ", undefined, undefined, "target", "="_blank">...www.example.com/clas", "</a>", undefined, undefined, " ", "</span>", undefined, undefined, " anything else"]
var output = match[0] + match[(match.indexOf('href="')+2)] + match[match.length-1]
//output: "anything interesting http://www.example.com/classname/methodname/arg1/arg2"  anything else"
  • / 定义正则表达式的开始和结束
  • | 定义了何时进行拆分的不同选项
  • &lt;\/*[a-zA-Z0-9=\\]+&gt; 为每个 html 标记拆分
  • (href=") 用于稍后查找正确的索引(用于您要显示的链接)
  • target 在您的 html 的“目标”属性的位置拆分字符串(您不想在输出中包含它)

希望有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-30
    • 2010-09-15
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多