2

在此标记中,我需要将标签文本“电子邮件”替换为“用户名”。我只能通过 jQuery 访问。

    <div class="foo" style="border:1px solid #444">
          <span class="field-with-fancyplaceholder">
          <label class="placeholder" for="pseudonym_session_unique_id" style="font-size: 13px;">
          <span>Email</span>
          </label>
          <input id="pseudonym_session_unique_id" class="text" type="text" size="30" name="pseudonym_session[unique_id]">
</span>
          <span class="field-with-fancyplaceholder">
          <label class="placeholder" for="pseudonym_session_password" style="font-size: 13px;">
          <span>Password</span>
          </label>
          <input id="pseudonym_session_password" class="text" type="password" size="30" name="pseudonym_session[password]">
          </span>
        </div>

当我尝试这个

$('label:nth-of-type(1)').addClass('bar');  
$('.bar span').text('user name'); 
// because $('label:nth-of-type(1) span') doesn't work 

两个标签都被选中,两个跨度都说“用户名”。我怎样才能得到第一个?

这是小提琴

4

4 回答 4

4

标签没有相同的父元素,并且:nth-of-type基于兄弟姐妹(具有相同父元素的元素)。

注意::nth-of-type在原生不支持它的浏览器中没有被 jQuery 实现,这意味着它在 IE6 7 或 8 中不起作用。

于 2012-08-17T17:38:05.430 回答
3

您可以尝试:contains选择器:

$('.foo label span:contains("Email")').text('user name');
于 2012-08-17T17:35:25.277 回答
3

您可以通过更具体的属性更可靠地选择正确的元素:

$("[for=pseudonym_session_unique_id] > span").text("user name");
于 2012-08-17T17:35:34.720 回答
2

使用:eq.

$('label:eq(0) span').text('user name');​

小提琴

于 2012-08-17T17:36:04.330 回答