2

当我在我的 Wordpress 网站上写博客文章时,我想在所有锚标签内动态添加一个跨度标签,其数据属性与锚标签具有相同的值。

例子

我在 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 做到这一点?

4

2 回答 2

7

使用 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过滤并在所有锚标签内放置一个跨度。

请注意,如果锚点包含图像,则不会添加跨度 - 如果需要,可以通过将_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 就足够了。

于 2012-12-04T12:22:52.960 回答
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>

http://jsfiddle.net/242b8/

于 2012-12-04T13:07:31.207 回答