当我在Wordpress网站上写博客帖子时,我想在所有锚标签中动态添加span-tag,其数据属性与锚标签具有相同的值。
示例
我在Wordpress中写的内容:
<p>Some text with <a href="#">a link in it</a></p>
产生什么:
<p>Some text with <a href="#"><span data-title="a link in it">a link in it</span></a>
你怎么能用jQuery或PHP做到这一点?
答案 0 :(得分:6)
使用PHP,你应该能够这样做:
function wrap_anchor_text_with_span( $content ) {
if ( ! is_admin() && preg_match( '~<a(.*?)>(.*?)</a>~', $content ) ) {
$content = preg_replace_callback( '~<a(.*?)>(.*?)</a>~', '_add_span', $content );
}
return $content;
}
add_filter('the_content', 'wrap_anchor_text_with_span', 10);
function _add_span( $matches ) {
if ( ! ( $title = strip_tags( $matches[2] ) ) ) { // If we only have an image inside the anchor
return '<a' . $matches[1] . '>' . $matches[2] . '</a>';
} else {
return '<a' . $matches[1] . '><span data-title="' . esc_attr( $title ) . '">' . $matches[2] . '</span></a>';
}
}
这个函数的作用是它挂钩到the_content
过滤器并在所有锚标记中放置一个span。
注意如果锚包含图片,则不会添加范围 - 如果需要,可以通过将_add_span
函数更改为:
function _add_span( $matches ) {
return '<a' . $matches[1] . '><span data-title="' . esc_attr( strip_tags( $matches[2] ) ) . '">' . $matches[2] . '</span></a>';
}
jQuery解决方案也不会非常困难,但我认为只有PHP足够了。
答案 1 :(得分:1)
jQuery和wrapInner()也有效:
<p>Some text with <a class="generate_span" href="#">a link in it</a></p>
<script>
$('.generate_span').each(function(){
$(this).wrapInner('<span data-title="'+($(this).attr('href'))+'"></span>');
});
</script>