0

所以我有一个带有 class 的 div ngg-navigation。我需要使用 jQuery 向它添加一个 ID,因为我不能直接触摸 HTML。这是我所拥有的:

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

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

4

5 回答 5

2

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

你不需要一个 ID,你只需要让你的 CSS 选择器更具体。

而不是这样做:

.ngg-navigation{
}

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

#parent-element .ngg-navigation{
}
于 2013-06-26T15:05:55.667 回答
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();
        }
    });
});

这也假设您只有一个带有 class 的元素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。只是思考的食物。

于 2013-06-26T14:55:18.357 回答
0

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

于 2013-06-26T14:51:35.737 回答
0

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

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

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

但是,如果您愿意,可以研究 jQuery ajaxComplete来注册一个处理程序,以便在 Ajax 请求完成时调用。

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

于 2013-06-26T14:56:17.017 回答
0

我想您可以将您的 DIV 包装在另一个 DIV 中,并将 id 应用于此父 DIV。

这样子 DIV 可以更改并且仍然可以使用 $('#yourID').find('.ngg-navigation') 来找到。

不确定这种方法是否干净,但它应该工作得很好而且很快。

于 2013-06-26T15:11:32.890 回答