选择没有id的html对象

时间:2013-04-05 20:14:07

标签: javascript jquery select

编辑:缺少一条信息 - 我不能使用类选择器,因为有更多的div具有相同的类。我已经想到了,但我忘了提它。我不知道为什么我的帖子被投票,但考虑到我提供了大量信息,给了它诚实的努力,并试图用代码示例详细说,看起来非常愚蠢。这个论坛上的人有时候很荒谬。

我正在尝试设置没有一个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,美学而不是。

6 个答案:

答案 0 :(得分:3)

使用班级选择器。

var theDivViaTheClass = $(".dhxform_note");

  

Class Selector (“.class”)

     

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

     

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

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

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

答案 1 :(得分:3)

您好像是按其文字定位<div>。尝试使用:contains选择器:

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

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

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

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

答案 2 :(得分:2)

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

$('.dhxform_note').html();

答案 3 :(得分: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");
    }
});

答案 4 :(得分:1)

如果你因任何原因无法设置id,我会假设你也不能设置类。也许你也没有可能有的专属列表。如果所有这些假设都适用,那么你可以考虑减少你的路径,否则请使用类选择器。

随着说:

$("div").filter(function() {
    return /^Remaining letters/.test($(this).text())
}).attr('id', 'id of your choice');

答案 5 :(得分:0)

对于有divdhxform_note的多个div并且您不知道所述$("div.dhxform_note").each(function(){ var text = $(this).text(); if(/^Remaining letters/.test(text)){ $(this).attr("id", "kudosMsgNote"); } }); 的确切位置的情况:

dhxform_note

EXAMPLE

但是,如果您知道div始终是$("div.dhxform_note").get(1).id = "kudosMsgNote"; 的第二次出现,那么您可以执行以下操作:

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

EXAMPLE

或进行contains搜索:

{{1}}

EXAMPLE