jQuery:为新生成的DOM元素添加ID

时间:2013-06-26 14:49:11

标签: jquery

所以我有一个班级ngg-navigation的div。我需要使用jQuery为它添加一个ID,因为我无法直接触摸HTML。这就是我所拥有的:

    jQuery(function($){
        $('.ngg-navigation').attr('id', 'ngg-navigation-id');
    });

这在初始加载时工作正常,但是还有其他javascript执行AJAX并刷新div,导致ngg-navigation-id ID消失。有没有办法在每次出现时添加ID?

5 个答案:

答案 0 :(得分:2)

在评论中,您说要添加ID的唯一原因是CSS特异性。

您不需要ID,只需要使CSS选择器更具体。

而不是:

.ngg-navigation{
}

尝试通过在其之前添加父级来使其更具体。像:

#parent-element .ngg-navigation{
}

答案 1 :(得分:1)

只需将其转换为函数,并在需要时调用它:

function setId(){
    $('.ngg-navigation').attr('id', 'ngg-navigation-id');

    // you may want to consider this, as its faster:
    // $('.ngg-navigation)[0].id = 'ngg-navigation-id';
}

你可以在页面加载时调用它(就像你正在做的那样),一个来自AJAX调用的回调,当你的猫晕倒......无论如何。

$(function(){
    setId();

    $.ajax({
        ...
        success:function(){
            setId();
        }
    });
});

这也假设您只有一个类ngg-navigation的元素,否则您的HTML将无效。

您还可以通过执行参数使其更具可重用性:

function setId($item,newID){
    $item.attr('id',newID);

    // or the faster alternative:
    // $item[0].id = newID;
}

电话:

setId($('.ngg-navigation'),'ngg-navigation-id');

这样你就可以传入任何其他jQuery对象/ ID配对,它会为你设置你的ID。只是值得深思。

答案 2 :(得分:0)

我想你可能想要添加一些代码,在每次刷新div时都会执行替换操作。

答案 3 :(得分:0)

正如其他人所提到的,id似乎是不必要的,因为你可以通过它的类名来引用元素。据推测,它是这个类的第一个或唯一的元素。您始终可以将其称为:

$('.ngg-navigation').first()

每当你需要使用这个元素时,你总是可以在那时添加id。

但是,如果您愿意,可以调查jQuery ajaxComplete,以便在Ajax请求完成时注册要调用的处理程序。

根据您最近的评论,如果您需要覆盖css,那么您可以使用jQuery来执行此操作,设置您需要的规则;这会覆盖当前的css。

答案 4 :(得分:0)

我猜你可以将你的DIV包装在另一个中,并将id应用于这个父DIV。

这样孩子DIV可以改变,但仍然可以使用$('#yourID')。find('。ngg-navigation')作为例子。

不确定此方法是否干净,但它应该可以很好地运行。