如何将此PHP正确插入<a> tag&#39;s title?</a>

时间:2011-09-07 17:07:57

标签: php jquery html

我知道这段代码不正确,但我想将HTML和PHP注入以下标记的标题中。

<p class="related_articles" title="<a href='<?php the_field(related_articles_1_link); ?>' target="_blank"><?php echo the_field(related_articles_1_title); ?></a>"Related Articles</p>

我正在使用jQuery工具提示插件(http://flowplayer.org/tools/tooltip/index.html),它从标题标签中抓取内容并将其显示为工具提示内容。我有高级自定义字段设置(WordPress插件),允许我发布自定义字段内容。实际上,我在这些自定义字段中发布的内容最终会出现在工具提示中。

我的目标是当用户将鼠标悬停在“相关文章”上时显示一个工具提示,该链接显示可点击的链接。再次,上面的jQuery工具提示插件从标题中抓取内容,这就是为什么这会导致难度

5 个答案:

答案 0 :(得分:1)

好的,我们了解您的目标。让我们明白一些事情。

<p class="related_articles" title="<a href='<?php the_field(related_articles_1_link); ?>' target="_blank"><?php echo the_field(related_articles_1_title); ?></a>"Related Articles</p>

在如此多的层面上是错误的。首先,它无论如何都无效。其次,你没有结束你的<a>。你也遗漏了一个回音而target=""内部title=""未被转义:target=\"\"

所以简而言之,直接回答你的问题,这可能会奏效(也许,因为它非常罕见和非标准)

<p class="related_articles" title="<a href=\"<?php echo the_field(related_articles_1_link); ?>\" target=\"_blank\"><?php echo the_field(related_articles_1_title); ?></a>">Related Articles</p>

另外,作为已经提到的用户之一。如果您的服务器服务器启用short open tags,那么您可以缩短<?php echo $foo; ?><?= $foo ?>。所以在你的代码中它看起来像:

<p class="related_articles" title="<a href=\"<?= the_field(related_articles_1_link) ?>\" target=\"_blank\"><?= the_field(related_articles_1_title) ?></a>">Related Articles</p>

然而,正如已经提到的那样。这不是推荐的方法,可能会产生各种问题。我建议研究一个更好的解决方案。

答案 1 :(得分:0)

如果您的服务器支持,请使用简短表格:

<?=the_field(related_articles_1_link)?>

或者,你应该回应它:

<?php echo the_field(related_articles_1_link); ?>

答案 2 :(得分:0)

这可能是你想要的吗?

<p class="related_articles">
    Related Articles:
    <a href="<?php echo the_field(related_articles_1_link); ?>" target="_blank">
        <?php echo the_field(related_articles_1_title); ?>
    </a>
</p>

既然您已经澄清了您的问题是关于jQuery Tooltip plugin,那么您应该执行以下操作:

<p class="related_articles">Related Articles</p>

<a class="tooltip" href="<?php the_field(related_articles_1_link); ?>" target="_blank">
    <?php echo the_field(related_articles_1_title); ?>
</a>

<强>使用Javascript:

$('.related_articles').tooltip();

这是有效的原因:

工具提示插件会在应用.tooltip()的元素之后查看该元素。如果下一个元素的类名为tooltip,它将使用它作为工具提示的内容(而不是title属性)。

答案 3 :(得分:0)

<p class="related_articles" title="<?php echo htmlspecialchars('<a href="'. the_field(related_articles_1_link) .'">'. the_field(related_articles_1_title) .'</a>'); ?>">Related Articles</p>

虽然这应该有用,但我不确定你提到的jQuery插件是否能够将title属性中给定的html解释为HTML(你需要测试它)。很可能这将被解释为文本,所有标签都将对最终用户可见,但这不是您想要的。

我找到了一个如何以不同方式实现此问题的示例:http://flowplayer.org/tools/demos/tooltip/any-html.html

答案 4 :(得分:0)

鉴于您将html内容放在HTML属性中,它应该被转义。正如@Karolis所说:

<p class="related_articles" title="<?php echo htmlentities('<a href="'.the_field(related_articles_1_link).'" target="_blank">'.the_field(related_articles_1_title).'</a>'); ?>">Related Articles</p>

这应生成一个带有链接的工具提示。如果你看到像“&amp; lt; a href =”这样的东西......&amp; gt;“在工具提示上然后插件不会取消html值。你可以取消值,但不幸的是javascript没有功能。为此你可以查看php.js 它在js中提供了php的功能,但这似乎有点矫枉过正。你可以替换像这样麻烦的字符:

<?php
// Generate complete tootltip content
$tootltipContent = '<a href="'.the_field(related_articles_link_1).'">'.the_field(related_articles_link_1).'</a>';
// Search for these
$search = array('<','>','"');
// And replace them with these
$replacements = array('@#','@#','\"'); 
$tooltipContent = str_replace($search,$replacements,$tooltipContent);
?>
<p class="related_articles" title="<?php echo $tooltipContent; ?>">Related Stuff</p>

然后在插件中查找从元素中提取标题的行。 (提示:在插件源代码上搜索'title'。应该有一个提取值的地方)它可能看起来像这个tooltipContent = $(someVar).attr('title');现在在js中运行逆替换:

tooltipContent = tooltipContent.replace('@#','<').replace('#@','>').replace('\"','"');