为什么这个div不会在jQuery中添加一个类?

时间:2010-08-31 18:21:49

标签: jquery dom-manipulation

我对我的数据库进行$.get调用并返回一些HTML(data):

$.get(url, null, function(data) {

它返回的HTML是这样的:

<div id="1234" class="myclass">..more html..</div>

在我的回调函数中,我尝试向它添加一个类(基于我已成功访问的一些条件),如下所示:

if (someCondition) $(data).addClass('mynewclass' + someId);

即使someCondition为真,我的HTML也没有添加mynewclass[someId]类。有什么理由说这可能是我只是愚蠢地忽视了吗?

谢谢......:\

修改

这是a link这个可重现的例子。它本身并不完全是我正在做的事情(我没有使用var外部来获取我的数据,但我正在复制相同的效果)。注意它是如何显示测试的“假”。

4 个答案:

答案 0 :(得分:3)

jQuery就像原始javascript一样适用于DOM。而你正在做的是试图操纵数据(在你的情况下HTML为长串)。在开始使用它之前,您需要至少将您请求的HTML数据添加到DOM。你的回调应该是这样的......

function(data){
  $('#container_to_fit_data').html(data); // Adding to Document
  someId = 1234;
  if (someCondition) 
      $('#'+someId, '#container_to_fit_data').addClass('mynewclass' + someId);
      // or lets see it in simplest form
      // $('#container_to_fit_data').find('#'+someId).addClass('mynewclass' + someId);
}

[编辑]

@Anurag jQuery能够操作字符串数据是真的,但不适用于非ID事务的情况。

你可以看到,

DOM_STR1 = "<div>
              <p>
                 <strong>Strong</strong>
                 <span class='myclass'>Span</span>
              </p>
            </div>"

DOM_STR2 = "<p>
              <strong>Strong</strong>
              <span class='myclass'>Span</span>
            </p>"


$('span.myclass', DOM_STR1) // We find span. Allright.
$('span.myclass', DOM_STR2) // We find span. Cool.

$('p', DOM_STR1) // We find p too. But..
$('p', DOM_STR2) // Empty. Never return p, Why??
$('div', DOM_STR1) // Empty Again. Why??
DOM_STR1中存在

'div',DOM_STR2中存在“p”。为什么jQuery无法读取包装元素,但是从字符串中找到子元素

因此,当数据无论如何都需要在DOM上时,从字符串中操作它是没有意义的。

答案 1 :(得分:3)

问题是你正在创建多个div对象。你正在创建的第一个被丢弃。然后创建一个新的,没有先前添加的类。

继续引用最初创建的div以及应用该类的div。然后将相同的div添加到页面中。

function(something) {
    var div = $(data).addClass('someClass');
    $('#container').html(div + div.is('.someClass'));
}

但是,现在我们正在处理一个对象(div)而不是一个字符串,并且尝试将对象转换为字符串将产生"[object Object]"。所以将append函数修改为:

$('#container').empty();
$('#container').append(div).append(String(div.is('.someClass')));

See your example updated

答案 2 :(得分:1)

@Jason:这就是我的观点,你需要在jQuery对象上使用.addClass,而不是原始HTML。或者你需要模式匹配'数据',将其视为一个字符串(它是)并将你的类注入class属性。

答案 3 :(得分:0)

“data”变量指的是返回信息的整个集合。这样的事情应该有效:

if(someCondition) { $(data).find('#1234').addClass('mynewclass'+someId); }