我有一个普通的字符串:
var text = '<p>hello</p> <iframe src="http://whatever.com/1"></iframe><iframe src="http://notsosure.com"></iframe><iframe src="http://whatever.com/2"></iframe><p>goodby</p>'
我需要从以src=http://whatever.com
开头的字符串中删除每个iframe,并用指向相同网址的链接替换它们。
我以为我可以用jQuery做类似的事情:
$text = $(text)
$text
.find("iframe[src^='http://whatever.com']")
.replaceWith('<a href="' + $( this ).attr('src') + '"> Click Here</a>')
但是这不起作用,因为它返回替换后的字符串,并且不会修改我的原始$ text对象。
答案 0 :(得分:4)
使用HTML解析器将使您处在正确的轨道上,而不是使用正则表达式(obligatory link)进行幼稚的文本处理。只是几件事:
<xsl:for-each select="/CUSTOMERS/PERSON">
<item>
<CUST_ID>
<xsl:value-of select="@customer_id" />
</CUST_ID>
<FIRSTNAME>
<xsl:value-of select="@first_name" />
</FIRSTNAME>
<LASTNAME>
<xsl:value-of select="@last_name" />
</LASTNAME>
</item>
</xsl:for-each>
,但是iframe
在那里找不到它们。例如(见评论):
find
var text = '<p>hello</p> <iframe src="http://whatever.com/1"></iframe><iframe src="http://notsosure.com"></iframe><iframe src="http://whatever.com/2"></iframe><p>goodby</p>';
// Put them in a wrapper for convenience, so we don't have to worry about iframe
// elements at the top level
var wrapper = $("<div>");
wrapper.append(text);
// Find and replace the relevant iframe elements
wrapper.find("iframe[src^='http://whatever.com']").each(function() {
$(this).replaceWith($("<a>").attr("href", this.src));
});
// Turn it back into text
text = wrapper.html();
console.log(text);