我对我的数据库进行$.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外部来获取我的数据,但我正在复制相同的效果)。注意它是如何显示测试的“假”。
答案 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')));
答案 2 :(得分:1)
@Jason:这就是我的观点,你需要在jQuery对象上使用.addClass,而不是原始HTML。或者你需要模式匹配'数据',将其视为一个字符串(它是)并将你的类注入class属性。
答案 3 :(得分:0)
“data”变量指的是返回信息的整个集合。这样的事情应该有效:
if(someCondition) { $(data).find('#1234').addClass('mynewclass'+someId); }