2

编辑:缺少一条信息-我不能使用类选择器,因为有更多具有同一类的 div。我已经想到了,但我忘了提。我不知道为什么我的帖子被否决了,但考虑到我提供了很多信息,付出了诚实的努力,并试图用代码示例来冗长,这似乎非常愚蠢。这个论坛上的人有时很可笑。

我正在尝试设置一个没有的 div 的 id,并且我无法在页面生成时给它一个。我尝试过使用 jquery(.each、.contains、.find、.filter 等),但似乎无法正确使用。我知道很多人都问过这个问题,但没有一个答案对我来说是有意义的。

我有能力设置 div 的文本(html?),但没有别的。它最终看起来像这样:

<div class="dhxform_note" style="width: 300px;">Remaining letters: 500</div>

我想要一个 div 对象的句柄,这样我就可以通过更新文本向用户显示他们可以输入多少个字母。

使用这个:

$("div")

返回页面上所有 div 的列表。我可以在列表中看到目标 div,但我无法让 jquery 返回单个对象。

我知道它也可以通过以下方式完成:

var divs = document.getElementsByTagName("div");
for(var i = 0; i < divs.length; i++) {
    if( /^Remaining letters/.test(divs[i].innerText) )
        divs[i].id = "kudosMsgNote"
    }
}

但我希望通过一个涉及 jquery 的更简洁的解决方案来完成这个。我也只是想知道如何用 jquery 来做到这一点,美学无法承受。

4

6 回答 6

3

使用类选择器。

var theDivViaTheClass = $(".dhxform_note");

类选择器(“.class”)

描述:选择具有给定类的所有元素。

添加的版本:1.0 jQuery( ".class" )

  • class: 要搜索的类。一个元素可以有多个类;只有其中一个必须匹配。

对于类选择器,如果浏览器支持,jQuery 会使用 JavaScript 的原生 getElementsByClassName() 函数。

于 2013-04-05T20:16:25.180 回答
3

您似乎是<div>通过其文本来定位的。尝试使用:contains选择器:

$("div").filter(':contains("Remaining letters")').first().attr("id", "kudosMsgNote");

.first()是为了确保不要id为多个元素设置相同的值,以防多个元素包含文本“剩余字母”。

这是:contains选择器的文档:http: //api.jquery.com/contains-selector/

请注意,您要查找的文本在使用时区分大小写:contains

于 2013-04-05T20:21:31.910 回答
2

那个 div 是唯一的那个类dhxform_note吗?如果是这样,您可以使用类选择器:

$('.dhxform_note').html();
于 2013-04-05T20:16:16.960 回答
1

使用 jQuery,您可以指定任何 css 选择器来获取 div:

$(".dhxform_note").attr("id", "kudosMsgNote");

也会给你这个元素。

选择内部文本可能有点冒险,所以我可能会建议,如果您可以控制该 HTML 元素的呈现,则改为像这样呈现它:

<div name="remainingLetters" class="dhxform_note" style="width: 300px">Remaining Letters:  500</div>

得到它是这样的:

$("[name=remainingLetters]").attr("id", "kudosMsgNote");

但是,您可能确实需要根据内部文本来选择它。在这种情况下,您需要执行以下操作:

$("div").each(function() {
    if ( /^Remaining letters/.test($(this).html()) ) {
        $(this).attr("id", "kudosMsgNote");
    }
});
于 2013-04-05T20:23:50.000 回答
1

如果您出于某种原因无法设置 id,我将假设您也无法设置类。也许您也没有可能存在的唯一类列表。如果所有这些假设确实适用,那么您可以考虑走您的路,否则请使用类选择器。

照这样说:

$("div").filter(function() {
    return /^Remaining letters/.test($(this).text())
}).attr('id', 'id of your choice');
于 2013-04-05T20:24:16.053 回答
0

对于类有多个divsdhxform_note并且您不知道 said 的确切位置的情况div

$("div.dhxform_note").each(function(){
    var text = $(this).text();
    if(/^Remaining letters/.test(text)){
        $(this).attr("id", "kudosMsgNote");
    }
});

例子

但是,如果您知道 div 总是第二次出现,dhxform_note那么您可以执行以下操作:

$("div.dhxform_note").get(1).id = "kudosMsgNote";

例子

或进行contains搜索:

$("div.dhxform_note:contains('Remaining letters')").first().attr("id", "kudosMsgNote");

例子

于 2013-04-05T20:20:57.760 回答