异步加载后,如何将类添加到元素中
How can I add class to an element after it has loaded asynchronously?
我的问题是,当AJAX加载元素并在成功回调期间将其附加到DOM中时,addClass方法执行得太快,并且不会显示转换。
$.ajax({
url : contentURL,
type : "GET",
dataType : "html",
success : function(response){
$content.append(response);
$activeSection = $('#'+href); // appended element
$activeSection.addClass("open"); // class is added before appending
}
});
没有ajax的问题:演示
您应该尝试同步ajax调用即async:错误
有关详细信息,请参阅以下链接http://api.jquery.com/jquery.ajax/
也许你需要使用一些类似的:
setInterval(function(){
if($('#elementId').html() != null) {
$('#elementId').addClass('.class');
return;
}
console.log('Working...');
}, 1000);
这是在元素存在并且类已被删除的情况下运行的。(抱歉英语不好)
操作DOM确实是资源密集型的。当一个新元素正在构建时,它被赋予了class属性。我的解决方案是在操作DOM之前准备一个包装器元素,并仅在包装器上修改class属性。在创建新元素之后,我插入了一个新的空包装器,用于进一步的内容加载。
我的解决方案
function addClass(el, classN) {
var hasClass = el.className.search(classN)+1;
if (hasClass) {
return true
} else {
el.className += el.className ? " "+classN : classN;
}
}
function removeClass(el, classN) {
var re = new RegExp("''s*"+classN, "ig");
el.className = el.className.replace(re, "");
if (el.className.length === 0) {
el.removeAttribute("class");
}
}
function dropping (el, classN, duration){
addClass(el, classN);
setTimeout(function(){
el.parentNode.removeChild(el);
state2 = null;
}, duration);
}
function opening(e) {
if (!open) {
open = true;
addClass(w1, "open");
addClass(w2, "open");
addClass(state0, "open");
state1 = state0;
state0 = conClear.cloneNode(true);
w3.appendChild(state0);
}
}
function closing(e) {
if (open) {
open = false;
removeClass(w1, "open");
removeClass(w2, "open");
dropping(state1, "drop", 1000);
state2 = state1;
state1 = null;
}
}
function paging(e){
if (open) {
dropping(state1, "drop", 1000);
state2 = state1;
addClass(state0, "open");
state1 = state0;
state0 = conClear.cloneNode(true);
w3.appendChild(state0);
}
}
var open = false;
var bO = document.getElementById("open");
var bC = document.getElementById("close");
var bP = document.getElementById("page");
var w1 = document.getElementById("wrapper1");
var w2 = document.getElementById("wrapper2");
var w3 = document.getElementById("wrapper3");
var con = w3.getElementsByClassName("content").item(0);
var state0 = con;
var state1 = null;
var state2 = null;
var conClear = con.cloneNode(true);
bO.addEventListener("click", opening, false);
bC.addEventListener("click", closing, false);
bP.addEventListener("click", paging, false);
相关文章:
- JQuery添加元素需要在我的js之前再次添加JQuery脚本
- 如何使用jquery遍历具有动态添加元素的数组
- jQuery appendTo 替换元素而不是添加元素,如果正在添加的元素预先存在于列表中
- 如何使用jquery添加元素
- 动态添加元素上的 HammerJS
- CSS没有'使用javascript向页面动态添加元素时无法工作
- 使用Javascript在DOM元素中添加元素
- 在添加元素时激发JS事件
- 什么's是在IE8+中添加元素的最有效方法
- d3.js在添加元素时协调
- 使用路由器链接动态添加元素
- 动态添加元素
- 在页面内容完全加载后,使用jQuery在DOM中添加元素
- j查询绑定单击不添加元素
- 在循环 jQuery 上添加元素
- 从一个页面调用 javascript 函数以在第二个页面上添加元素
- 页面加载后向<正文>添加元素时出现问题
- 动态添加元素时刷新 HTML
- 动态添加元素时不触发 JQuery 事件
- 如何使用 JavaScript 获取动态添加元素的宽度