如何在jquery脚本中获取动态帖子ID或值

时间:2012-03-17 16:16:02

标签: jquery wordpress plugins vote

我正在制作一个小小的wordpress插件"评价我的任何"。这个插件适用于单个帖子,但在博客页面上有多个帖子,插件无法看到点击已完成的帖子ID。它始终需要页面的第一个值。

我已经在id和类名中添加了帖子ID以解决问题(例如:post_id $ post-> ID),但现在我以这种方式阻止编辑jquery文件。

投票后项目的PHP代码:

 <input type=\"hidden\" id=\"post_id$post->ID\" value=\"" . $post->ID . "\" />
    <div class=\"vote\">
<table>
    <tr><td>
    <a class=\"vote_up\" href=\"#\"></a></td>
<td>
    <a class=\"vote_down\" href=\"#\"></a></td></tr>
    <tr>
<td class=\"up_perc$post->ID\">" . get_percentage(1, $post->ID ) ."%</td>
<td class=\"down_perc$post->ID\">" . get_percentage(2, $post->ID) . "% </td>
</tr>
    </table></div>

 <div class=\"vote_succ$post->ID\"></div>

jquery代码(投票结果,投票结果大致相同):

jQuery(document).ready(function($) { 


        $(".vote_up").click(function(e) { 
        e.preventDefault();

        $.post('/wp-content/plugins/rate-my-whatever/rate.php', {vote_type: "1", post_id: $("#post_id1").val()}, function(data) {

            $(".vote_succ1").html(data);
            $.post('/wp-content/plugins/rate-my-whatever/rate.php', {action: "getPercentage",  vote_type: "1", post_id: $("#post_id1").val()}, function(data2) {
                $(".up_perc1").html(data2);
            });
            $.post('/wp-content/plugins/rate-my-whatever/rate.php', {action: "getPercentage", vote_type: "2", post_id: $("#post_id1").val()}, function(data3) {
                $(".down_perc1").html(data3);
            });
        });
    });

我静静地放了#34; 1&#34;在一些id和class元素之后检查我的问题将如何解决,它适用于Post 1,id和value是&#34; 1&#34;,现在我需要替换&#34; 1&#34;在#post_id,.vote_succ,.up_perc,.down_perc的末尾通过动态代码使其与php代码生成的动态元素一起工作。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您需要更改代码,使其在单击的单元上运行,而不是在整个页面中该类的所有对象上运行。最简单的方法是将每个单元放在一个像这样的容器div中,只使用类名,没有ID值:

<div class=\"voteUnit\">
    <input type=\"hidden\" class=\"post_id\" value=\"" . $post->ID . "\" />
    <div class=\"vote\">
    <table>
        <tr>
            <td><a class=\"vote_up\" href=\"#\"></a></td>
            <td><a class=\"vote_down\" href=\"#\"></a></td>
        </tr>
        <tr>
            <td class=\"up_perc\">" . get_percentage(1, $post->ID ) ."%</td>
            <td class=\"down_perc\">" . get_percentage(2, $post->ID) . "% </td>
        </tr>
    </table>
    </div>

    <div class=\"vote_succ\"></div>
</div>

然后,更改代码,找到相同的投票单元中的相关对象,使用$(this).closest('.voteUnit').find()查找单击的投票单元中的对象,而不是查看整个网页在所有投票单位中查找对象。 .closest('.voteUnit')从点击的项目中查找祖先链,直到找到具有class=voteUnit的父级。然后,代码可以使用它作为子树来搜索投票单元中的其他对象。

jQuery(document).ready(function($) { 
    $(".vote_up").click(function(e) { 
        var unit$ = $(this).closest('.voteUnit');
        e.preventDefault();

        $.post('/wp-content/plugins/rate-my-whatever/rate.php', {vote_type: "1", post_id: unit$.find(".post_id").val()}, function(data) {

        unit$.find(".vote_succ").html(data);
        $.post('/wp-content/plugins/rate-my-whatever/rate.php', {action: "getPercentage",  vote_type: "1", post_id: unit$.find(".post_id").val()}, function(data2) {
            unit$.find(".up_perc").html(data2);
        });
        $.post('/wp-content/plugins/rate-my-whatever/rate.php', {action: "getPercentage", vote_type: "2", post_id: unit$.find(".post_id").val()}, function(data3) {
            unit$.find(".down_perc").html(data3);
        });
    });
});