向帖子内容中的单词添加Java脚本操作

时间:2014-09-20 作者:supercat

我想让我的博客在点击特定单词时运行一些JavaScript代码。

一种方法是在帖子的HTML元素中包含“onClick”处理程序,并禁用任何删除它们的过滤,但这似乎相当危险。

另一种方法是创建一个地址以“#”开头的链接,并用脚本监视地址后缀的变化,但这似乎有些做作。

第三种方法是让脚本在DOM树中扫描某个标记,并将事件绑定到包含它的任何元素。这可能是可行的,但如何确保在HTML和WYSIWYG模式之间切换编辑器不会吞噬注释中的任何基本信息仍然是一个悬而未决的问题。

我怀疑正确的方法是使用短代码,但我只是从WordPress开始,虽然我懂Javascript,但我不懂PHP。

我怀疑我是第一个在帖子中试图将动作与特定词语联系起来的人,所以我不想不必要地重新发明轮子。

如果我想让许多单词运行相同的方法,但为每个单词指定不同的字符串参数值(例如,我可能想将参数“bird”附加到“robin”,将“fish”附加到“guppy”,以便单击“robin”将运行ClickedWord("bird") 点击“guppy”就会运行ClickedWord("fish")) 促进这一点的最佳方法是什么?

1 个回复
SO网友:gmazzap

假设您有这样一个javascript:

function clickedTag( tag ) {
  var d = new Date(); 
  console.log( \'A word with tag \' + tag + \'has been cliked at \' + d.toDateString() );
}
在你的帖子中有这样一句话:

敏捷的棕色狐狸跳过懒惰的狗

你想要javascriptclickedTag( "pet" ); 将在用户单击单词“dog”时运行。

javascript方面的正确方法可能是在数据属性的帮助下编写单个函数,例如:

敏捷的棕色狐狸跳过懒惰的狐狸<span class="click-tag" data-tag="pet"></span>

以及javascript:

jQuery(document).on( \'click\', \'span.click-tag\', function(e) {
  e.preventDefault();
  var tag = jQuery(this).data(\'tag\');
  if ( typeof tag === \'string\' && tag !== \'\' ) {
    return clickedTag( jQuery(this).data(\'tag\') );
  }
});
因此,使用一个很小的函数,您可以用任何单词运行javascript函数,而单词本身与传递给函数的参数无关。

到目前为止,一切顺利。然而,这与WordPress无关,是的,将该标记添加到帖子内容中会带来一些您在OP中解释的问题,并且如果您有大量帖子和大量需要“标记”的单词,手动为您需要的每个单词添加跨距码可能会很困难。

但是,是的,短代码可以是一种解决方案。

就拿一个examplesadd_shortcode 在Codex中归档并稍加修改:

function my_first_shortcode( $atts, $word=\'\' ) {
  $atts = shortcode_atts( array ( \'tag\' => \'\' ), $atts );
  $format = \'<span class="click-tag" data-tag="%s">\' . esc_html( $word ) . \'</span>\';
  return sprintf( $format, esc_attr( $atts[\'tag\'] ) );
}

add_shortcode( \'clicktag\', \'my_first_shortcode\' );
一旦您在functions.php 或者在插件文件中,您可以在帖子中使用快捷代码“clicktag”,例如,您可以编写

敏捷的棕色狐狸跳过懒惰的狗

带有data属性的span将在您的帖子中包含单词“dog”。

结合上面发布的jQuery函数,您就完成了。

请注意,我发布的javascript以及您的javascript代码(函数clickedTag 在本例中),应使用wp_enqueue_script.一个方便的方法是打电话wp_enqueue_script 在短代码回调中(my_first_shortcode PHP函数,在上面的示例中)。

最后,您可能希望使用类“click tag”来设置跨度的样式,并让用户了解他们是可单击的。

在这个Gist 你会发现一个可以工作的、随时可以安装的插件(只需下载这两个文件并将它们放在插件文件夹中的一个文件夹中),其中包含我在这里发布的代码的一个稍加修改的版本。

剩下的唯一一件事就是为clickedTag 函数,但此处将不介绍该函数。

结束

相关推荐

do_shortcode close

我正在WordPress上使用jscrollpane插件以及高级自定义字段插件。jscrollpane插件使用以下短代码:[vr_jsp] [/vr_jsp] 我有两个不同的自定义字段,需要放在它们自己的上述短代码集之间,它们是:<?php the_field(\'first_content_block\'); ?> <?php the_field(\'second_content_block\'); ?> 我知道您可以使用下面的代码来实现这一点