0

我在 Wordpress 中的帖子内容是一个很大的标记。它来自 MS Word,因此它是由 HTML 嵌套标签和内联样式包裹的文本。

我有一段代码在内容中重复了很多次(它代表文本脚注)。这部分,例如第一个脚注是:

<sup><a title="" href="file:///C:/Users/hp/Desktop/file.docx#_ftn1" name="_f
tnref1">
 <span class="MsoFootnoteReference">
  <span dir="LTR">
   <span class="MsoFootnoteReference">
    <span lang="EN-US" style="font-size: 16pt; line-height: 115%;">
     [1]
    </span>
   </span>
  </span>
 </span>
</a></sup>
.....

<a title="" href="file:///C:/Users/hp/Desktop/file.docx#_ftnref1" name="_ftn1">
 <span class="MsoFootnoteReference">
  <span dir="LTR" lang="EN-US" style="font-size: 12.0pt; font-family: 'Simplified Arabic','serif';">
   <span class="MsoFootnoteReference">
    <span lang="EN-US" style="font-size: 12pt; line-height: 115%;">
     [1]
    </span>
   </span>
  </span>
 </span>
</a>

我的目标是将 2 个 href 从:

href="file:///C:/Users/hp/Desktop/file.docx#_ftn1" 

href="file:///C:/Users/hp/Desktop/file.docx#_ftnref1"

到:

href="#_ftn1" 

href="#_ftnref1"

这样用户就可以从一个锚点跳到另一个锚点。

问题:

1-使用服务器端语言而不是 jquery 更好吗?

2-如何循环重复段并更改每对锚的href内容?

非常感谢您的宝贵帮助。

解决方案:

通过使用 Broxzier + PHP 提供的正则表达式,下面的代码可以正常工作,并且可以在将其持久化到数据库之前应用于任何数据。

if(preg_match_all('/href\s*=\s*"[^"]+(#[^"]+)"/',get_the_content(),$match))
{
echo preg_replace('/href\s*=\s*"[^"]+(#[^"]+)"/','href="$1"', get_the_content()); 
}   
4

2 回答 2

1

的使用jQuery.attr()hash属性<a>

$('a').has('.MsoFootnoteReference').attr('href',function( idx,oldHref){
   return this.hash;
});

您可能希望对所见即所得的 html 提交使用一些 html 清理,这将清理不需要的类并为您修改 href。

例如SimpleHtmlDOMphp 库使用 css 类型选择器来修改 html,您可以使用它来修改其中的任何href内容file://,例如

于 2013-11-03T00:55:33.183 回答
1

1-使用服务器端语言而不是 jquery 更好吗?

两者都不。最好和最快的选择是从链接中完全删除网站和页面名称,如果它们与当前页面相同。

一种方法是使用正则表达式,这可以通过 JavaScript 完成,但我强烈建议使用文本编辑器并替换旧数据(Wordpress 无论如何都会保存修订)。

以下正则表达式将获取href属性

href\s*=\s*"[^"]+(#[^"]+)"

将此替换为:

href="\1"

你完成了。

2-如何循环重复段并更改每对锚的href内容?

使用全局标志来执行此操作。由于它是内容,我建议您手动执行或更改正则表达式,使其仅匹配当前 url。

请注意,如果其中有任何类似的文本,这也将替换内容href="website#flag"中的出现。我认为情况并非如此。

--

正则表达式可视化

于 2013-11-03T01:02:22.937 回答