使用jQuery更改p标记的内容

时间:2013-04-28 20:38:31

标签: jquery

如何用新的内容替换p的当前内容?我目前的解决方案不起作用。如果我在函数(响应){}中放置一个警报(“Something”),它就会响应。内容没有被替换,没有任何反应!

             $(this).find(".caption").find("#yes").live('click', function() {
                $.ajax({
                    url: 'prob.php',
                    data: {action: 'yes'},
                    type: 'post',
                    success: function (response) {
                            $(this).find(".caption").find("#change").html("<p>Come on!</p>");
                        }
                    });
                });

这是我的HTML:

                 <li>
                        <a class="thumb" name="leaf" href="<?php echo $images_dir.$_SESSION['current_img'].".jpg" ?>" title="Title #0">
                            <img src="<?php echo $images_dir.'thumbs/'.$_SESSION['current_img'].".jpg" ?>" alt='Title #0' />
                        </a>
                        <div class="caption" id="current">
                        <div class="image-title">
                            <p id="change">Image shows a nautillus shell:  
                                <input type="checkbox" id="yes">Yes
                                <input type="checkbox" id="no">No
                            </p>
                        </div>                                 
                    </li>

2 个答案:

答案 0 :(得分:4)

你真的需要遍历DOM树吗?因为您需要的两个元素都有(希望)唯一ID,这意味着您可以直接访问它们。

Here是一个简化的js代码。

$(document).ready(function () {

    $('#yes').on('click', function () {

        $('#change').text('Come on!');

    });
});

如果您无法做到这一点,我还有其他建议,因为其他人已经在给定的上下文中提到了$(this)的问题。 我建议您将.live()替换为.on(),因为从{jQuery v1.7开始不推荐使用.live()并在1.9中删除了

修改

我还设置了fiddle,其中#yes和#change已更改为类。在这个小提琴中你有2个<li>标签和“加油!”文本将插入右侧<p class"change">

答案 1 :(得分:3)

在你内部,ajax success this上下文将是ajax而不是实际的DOM元素,因此你可以使用$.proxy传递ajax调用中元素的上下文。另一件事是,live已被弃用,您可以将on()用于委派的事件处理程序。

Sample Fiddle

   $(this).find(".caption").find("#yes").on('click', function() {
             $.ajax({
                    url: 'prob.php',
                    data: {action: 'yes'},
                    type: 'post',
                    success:$.proxy( function (response) {
                            $(this).find(".caption").find("#change").text("Come on!");
                        },this),
                    error:$.proxy(function()
                    {
                       //
                    }, this)
                })
 });