我正在尝试使用.html到达已插入的类元素。当我通过点击事件在一个函数中调用它时它可以工作,但是当我直接调用它时它不会......任何想法?
$("#textarea).html("<div>Lorem ipusum<span class='note-content'>Note text</span>Lorem ipusum</div>");
function collapseNotes() {
$(".note-content").animate({
width:"50px",
opacity: ".3",
});
}
//this works
$("#button").click(function() {
collapseNotes();
});
//this doesn't work
collapseNotes();
答案 0 :(得分:1)
您在页面上加载的内容之前调用collapseNotes();
,请记住JavaScript是一种异步语言,您应该在使用它之前等待某些事情做好准备,例如:
(function($) {
console.log('DOM Loaded!');
collapseNotes();
})($);
答案 1 :(得分:0)
$(document).ready(function () {
collapseNotes();
});
答案 2 :(得分:0)
尝试将整个JQuery放入:
$(document).ready(function(){
//your code here
});
应该通过确保加载整个DOM来修复它
答案 3 :(得分:0)
的 LIVE DEMO 强>
function collapseNotes() {
$(".note-content").animate({
width:"50px",
opacity: "0.3" // extra comma "," removed
}, 800); // animation time !
}
$(function(){ // DOM is ready to be manipulated
// Missing an " $("#textarea) <--- fixed
$("#textarea").html("<div>Lorem ipusum<span class='note-content'>Note text</span>Lorem ipusum</div>");
//this works
$("#button").click(function() {
collapseNotes();
});
//this works
collapseNotes();
});
答案 4 :(得分:0)
尝试jQuery ready()功能:
$(document).ready(function() {
collapseNotes();
});
答案 5 :(得分:0)
从您的评论中,很明显您在AJAX回调中创建了注释。您对collapseNotes
的调用不在回调范围内,因此不会等到AJAX请求完成。
您的解决方案是将调用移至AJAX(collapseNotes
)回调中的getJSON
:
$.getJSON('text/1.json', function(data) {
$("#chapter-text-area").html(data.content);
collapseNotes(); // place the call here instead!
});
// this is called before the call to $('#chapter-text-area').html,
// so no notes are found
collapseNotes();
由于AJAX请求是异步的,浏览器将在$.getJSON
行发送请求,然后立即转到下一条指令collapseNotes()
。它 not 等待服务器响应请求,这就是你的回调被触发的时候。
从单击侦听器执行代码时,代码工作的原因是浏览器有时间在单击按钮之前完成请求(因此创建注释)。