代码之家  ›  专栏  ›  技术社区  ›  Jason

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

  •  2
  • Jason  · 技术社区  · 15 年前

    $.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来获取我的数据,但我正在重现同样的效果)。注意它在测试中是如何显示“false”的。

    4 回复  |  直到 15 年前
        1
  •  3
  •   Anurag    15 年前

    问题是您正在创建多个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
  •  3
  •   simplyharsh    15 年前

    类似jQuery的原始javascript在DOM上工作。您正在做的是尝试对数据进行操作(在您的示例中,HTML作为长字符串)。在开始使用DOM之前,至少需要将请求的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??
    

    “div”出现在DOM\u STR1中,与“p”出现在DOM\u STR2中的方式相同。为什么jQuery不能读取包装元素,但是从字符串中查找子元素??

    所以,当数据需要放在DOM上时,从字符串对其进行操作是没有意义的。

        3
  •  1
  •   Moin Zaman    15 年前

    @杰森:这就是我的观点,你需要在jQuery对象上使用.addClass,而不是原始的HTML。或者,您需要对“data”进行模式匹配,将其视为字符串(实际上是字符串),并将您的类注入class属性。

        4
  •  0
  •   RussellUresti    15 年前

    “data”变量是指返回信息的整个集合。这样的方法应该有用:

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