我想将colspan
与jQuery一起添加到元素中。如果我在Chrome中将此功能插入控制台,那么它可以正常工作,但是如果我把它放在文档就绪并在脚本中运行它就没有任何反应。如果可能,应在所有脚本运行后运行此函数。任何提示都会有所帮助,无法访问HTML。
$( document ).ready(function() {
$("#fieldset_Q8aGrid td:eq(4)").attr('colSpan',3)
});
答案 0 :(得分:1)
您可能正在运行一些异步脚本,这些脚本会在代码运行后添加内容。如果您无法访问其他代码,那么最实用的解决方案是不时尝试直到成功:
$( document ).ready(function() {
var timer = setInterval(function () {
if ($("#fieldset_Q8aGrid td:eq(4)").attr('colSpan',3).length) {
clearInterval(timer);
}
}, 500); // check every half-second.
});
答案 1 :(得分:1)
我假设您的程序中有一些异步代码,例如,创建动态HTML。如果您不知道所有功能何时完全执行,就会出现这种情况。
我们可以将这个问题分成两部分。
要解决1)您只需将代码放在脚本的末尾即可。 要解决2)你必须使用jQuery的延迟以及何时明确地告诉你的程序:当X,Y,Z完成时执行它。
快速解释(并且非常不准确)承诺的内容:
promise是一个带有then方法的对象(可以)。那么方法 可以接收一个在承诺时将被调用的函数 解决
从动画中,您可以使用 .promise()方法创建一个将在动画完成后解析的承诺。
var animationPromise = $('h1')
.css({'left': '0', 'position' : 'relative'})
.animate({'left': '20px'}, 700, 'linear')
.promise()
如果您正在调用服务,jQuery的发布,获取和 ajax ,则返回承诺
// save the promise for later use
var asyncPromise = $.get('https://jsonplaceholder.typicode.com/users');
// execute some the function that uses this data
asyncPromise.then(function(users) { /* do something with the data */ })
也许,你有一些既不是AJAX也不是动画的功能,在这种情况下你可以创建自己的承诺。例如,此承诺是从setTimeout解决的。
var backgroundChange = $.Deferred()
setTimeout(function() {
$('body').css('background', 'lightblue')
backgroundChange.resolve(true)
}, 3000) /* Please note that backgroundChange
doesn't know that it will be resolved after 3 seconds */
稍后,您可以使用 .when(...)创建在解决一组承诺时解析的承诺。
$.when(asyncPromise, backgroundChange, animationPromise)
.then(function() {
$('.container').css('color', 'blue')
//alert('Everything is done!');
})
的工作示例
答案 2 :(得分:0)
您可以重新排列脚本以更改其顺序,也可以使用window.load:
$(window).load(function() {
// code
});
但是在你的所有页面都被加载之后,这将会激活。甚至图像。因此,采用第一种方法会更好。