如何在给定的div jQuery中找到特定的链接

时间:2013-11-19 11:31:30

标签: jquery html json find

我有以下HTML:

<div class="ally_request_container" data-type="ally" field-id="<?=$random_id;?>">
    <span class="ally_request_label">Request</span>
    <a class="ally_request" data-type="accept" href="#">Accept</a>
</div>

我希望能够将链接data-type =“accept”更改为data-type =“remove”,并将链接文本从Accept更改为Remove,具体取决于我点击的链接,可能有100个,这就是为什么我使用父div的字段ID来定位我点击的内容。

如何查找和更改上述内容?

我有以下用于获取field-id的JSON响应:

$(document).ready(function(){
    $(".ally_request").click(function(){
        var type = $(this).parent().attr('data-type');
        var this_type = $(this).attr('data-type');
        var field_id = $(this).parent().attr('field-id');
        var find = $("div").find("[field-id='" + field_id + "']");
        var position = find.position();

        alert('Type '+type);
        alert('This Type '+this_type);
        alert('Field ID '+field_id);
        alert('Find '+find);
        alert('Position '+position);

        switch(type){
            case 'ally':
                switch(this_type){
                    case 'accept':
                    $.getJSON('json.php', {action:'ally.accept',ally_id:field_id}, function(response){
                        if(response.status == 200){
                            var result = response.message;

                            //To reset the title and link data type
                            //change link data-type and text here
                        }
                        else{
                            alert(response.message);
                        }
                    });
                    break;
                    default:
                        alert('Unknown Accept Result.');
                    break;
                }
            break;
            default:
                alert('Unknown Search Result.');
            break;
        }
        return false;
    });
});

3 个答案:

答案 0 :(得分:1)

由于成功处理程序的执行上下文不同,因此不能在成功处理程序中使用this引用,而是使用闭包变量。

尝试

$(document).ready(function () {
    $(".ally_request").click(function () {
        var $this = $(this),
            $parent = $this.parent();

        var type = $parent.attr('data-type');
        var this_type = $this.attr('data-type');
        var field_id = $parent.attr('field-id');
        var find = $("div").find("[field-id='" + field_id + "']");
        var position = find.position();

        alert('Type ' + type);
        alert('This Type ' + this_type);
        alert('Field ID ' + field_id);
        alert('Find ' + find);
        alert('Position ' + position);

        switch (type) {
            case 'ally':
                switch (this_type) {
                    case 'accept':
                        $.getJSON('json.php', {
                            action: 'ally.accept',
                            ally_id: field_id
                        }, function (response) {
                            if (response.status == 200) {
                                var result = response.message;

                                $this.attr('data-type', 'remove').text('Remove')
                                //To reset the title and link data type
                                //change link data-type and text here
                            } else {
                                alert(response.message);
                            }
                        });
                        break;
                    default:
                        alert('Unknown Accept Result.');
                        break;
                }
                break;
            default:
                alert('Unknown Search Result.');
                break;
        }
        return false;
    });
});

答案 1 :(得分:0)

在点击处理程序代码中添加:

$(this).attr('data-type', 'remove');

答案 2 :(得分:0)

试试这个

将选择器添加到元素然后访问

<a id="test" class="ally_request" data-type="accept" href="#">Accept</a>

更改数据类型

$('#test').data('type','remove');

更改文字

$('#test').text('Remove');