在这里,我们将给大家分享关于在通过jquery/Javascript大量添加新元素后,DOM是否立即就绪?的知识,同时也会涉及到如何更有效地AjaxHEAD通过Javascript/jQuery请求、
在这里,我们将给大家分享关于在通过jquery / Javascript大量添加新元素后,DOM是否立即就绪?的知识,同时也会涉及到如何更有效地Ajax HEAD通过Javascript / jQuery请求、JavaScript / jQuery是否总是拥有该元素的最新元素或版本?、javascript – FireFox扩展:如何通过jQuery访问页面元素?、javascript – jQuery在追加新元素之前填充内容的内容。
本文目录一览:- 在通过jquery / Javascript大量添加新元素后,DOM是否立即就绪?
- Ajax HEAD通过Javascript / jQuery请求
- JavaScript / jQuery是否总是拥有该元素的最新元素或版本?
- javascript – FireFox扩展:如何通过jQuery访问页面元素?
- javascript – jQuery在追加新元素之前填充内容
在通过jquery / Javascript大量添加新元素后,DOM是否立即就绪?
<script> function main(){ code_that_add_contents_to_dom(); code_that_works_on_added_contents_on_dom(); } </script>
我一直在研究一个通常遇到上述情况的网络项目.让我们假设以下功能.
var code_that_add_contents_to_dom = function(){ var parent = document.getElementById("id_1"); var child = document.createElement('div'); child.id = 'child_id_1'; parent.appendChild(child); ... }
上面的函数为dom添加了新元素,并假设有很多appendChild语句.
现在让我们创建一个函数,该函数适用于上面函数附加到DOM的元素.例如,让我们假设我们在该元素中创建了一个dataTable.
var code_that_works_on_added_contents_on_dom = function(){ var dataTable = $('#child_id_1').dataTable(); // or something similar that // works on prevIoUsly added //elements }
现在让我们假设我调用了函数main().问题是第二个函数要么产生错误要么根本不做任何事情.但如果我写主函数如下:
<script> function main(){ code_that_add_contents_to_dom(); setTimeout(function(){ code_that_works_on_added_contents_on_dom(); },some_millisecs); } </script>
如果some_millisecs有一些值,例如500(在我的特定情况下),那么一切正常.
所以这是问题.
> DOM操作方法是否需要时间来实际制作
即使在操作方法返回后,DOM也会更改?
>在这种情况下,我可以遵循的最佳做法是什么?
>或者我错过了一些简单的东西?
编辑
我已经得到了返回和使用操作DOM的函数的引用的答案.我想说清楚它并非总是如此.假设我不想从JSON文件创建dataTable(Bootstrap).在函数code_that_add_contents_to_dom();我解析JSON并动态创建标记为
<table id='example'> <thead> <tr> <th>Name</th> <th>Position</th> </tr> </thead> <tbody> <tr> <td>Tiger Nixon</td> <td>System Architect</td> </tr> <tr> <td>Roxi</td> <td>System Admin</td> </tr> </tbody> </table>
现在第二个函数code_that_works_on_added_contents_on_dom();将数据表初始化为示例div.
现在我面临类似的问题,因为表标记是动态生成的,第二个函数初始化dataTable但是说“找不到数据”.但它适用于setTimeOut添加到一定延迟后初始化数据表.
我实际上通过使用dataTable.addRow()方法解决了这个问题.但我想知道的是,一旦DOM操作函数返回,为什么DOM不准备好?我希望我清楚自己
再次感谢!!
解决方法
除了1:混淆纯DOM函数(document.getElementById(“child_id_1”))和jQuery($(‘#child_id_1’))令人困惑.如果您选择一种方法并支持它,它将使一切更易读和更容易.
除了2:在code_that_add_contents_to_dom中,您要查找ID为child_id_1的元素,但为您创建的新元素分配相同的ID.我假设这是示例代码中的错误.但是你使用的是child.ID,无论如何都应该是child.id.同样使用我的方法,您无需分配ID,因为您将使用现有的引用.
例:
<script> function main(){ var createdElements = code_that_add_contents_to_dom(); code_that_works_on_added_contents_on_dom(createdElements.elementA,createdElements.elementB); } var code_that_add_contents_to_dom = function(){ var parent = $("#child_id_1"); // Use jQuery everywhere var child = $("<div>"); parent.appendChild(child); return { elementA: parent,elementB: child }; } code_that_works_on_added_contents_on_dom(parent,child) { child.dataTable(); } </script>
Ajax HEAD通过Javascript / jQuery请求
我似乎在制作HEAD请求时遇到了一些问题,并保留了数组中数据的完整性.
鉴于此片段:
var imageTemp = Array();
$('*')
.each(function(index){
if($(this).css('background-image') != 'none'){
imageTemp.push($(this).css('background-image').slice(5, -2));
}
});
我捕获给定页面上所有背景图像的URL.现在,尝试通过HEAD请求内容长度来获取每个图像的大小,我使用此代码段:
var imageData = Array();
for(var i = 0; i < imageTemp.length; i++){
ajaxSizeRequest = $.ajax({
type: "HEAD",
async: true,
url: imageTemp[i],
success: function(message){
imageData.push([imageTemp[i], ajaxSizeRequest.getResponseHeader('Content-Length')]);
}
});
}
但是,当我通过console.log转储imageData时,我的每个元素(应该是包含URL和内容长度的数组)最终为[undefined,XXXX],其中XXXX始终是最后请求的Content-Length的大小
我很难过,虽然这似乎是一个时间/范围问题.我在这里遇到过某种竞争条件吗?
解决方法:
问题是回调函数捕获的单个变量i和ajaxSizeRequest对于回调函数的所有实例都是相同的变量.我想如果你调用一个函数并将索引变量传递给它,同时将请求变量本地范围扩展到函数本身使用done处理程序的响应参数,你最终应该得到回调捕获的独立变量.然后它应该正确引用每个数组元素和每个响应变量.
var imageData = Array();
for(var i = 0; i < imageTemp.length; i++){
updateImageData( i );
}
function updateImageData( i )
$.ajax({
type: "HEAD",
async: true,
url: imageTemp[i],
}).done(function(message,text,jqXHR){
imageData.push([imageTemp[i], jqXHR.getResponseHeader('Content-Length')]);
});
}
JavaScript / jQuery是否总是拥有该元素的最新元素或版本?
var theElement = $('div.someClass:last');
要获取类.someClass中的最后一个元素,以便我可以解析它.
这就是我的问题所在.此页面上还有另一个脚本动态添加一个新的< div class =“someClass”>每过一段时间.我希望始终在页面上的最后一个元素选择一个.someClass类.
Javascript / jQuery会不会有最新的元素,还是我必须手动“刷新”它?
解决方法
var theElements = document.getElementsByClassName('someClass');
然后可靠地使用
var theElement = $(theElements[theElements.length - 1]); // wrapping in $() is optional
这是值得做的$(选择器)是一个非常昂贵的操作.
编辑 – 仅适用于ie9及以上虽然http://caniuse.com/getelementsbyclassname
javascript – FireFox扩展:如何通过jQuery访问页面元素?
我使用以下代码:
var myExtension = {
init: function() {
// The event can be DOMContentLoaded, pageshow, pagehide, load or unload.
if(gbrowser) gbrowser.addEventListener("DOMContentLoaded", this.onPageLoad, false);
},
onPageLoad: function(aEvent) {
var doc = aEvent.originalTarget; // doc is document that triggered the event
var win = doc.defaultview; // win is the window for the doc
//alert("page is loaded \n" +doc.location.href);
// alert(doc.location.href.indexOf("facebook.com"));
if(doc.location.href.indexOf("facebook.com") == -1)
{
return;
}
alert("we are here");
alert($("#blueBar").html());
}
}
window.addEventListener("load", function load(event){
window.removeEventListener("load", load, false); //remove listener, no longer needed
myExtension.init();
},false);
它不断给出未定义的错误
解决方法:
$()默认使用当前窗口的文档.在你的情况下,这实际上是browser.xul.你需要对你已经通过var doc = aEvent.originalTarget;获得的子文档进行操作,所以这应该工作我认为(未经测试)
$(doc).find("#blueBar")
javascript – jQuery在追加新元素之前填充内容
我正在尝试使用数据填充特征,然后将其附加到#wrapper.这不适合我.我究竟做错了什么?
var featured = '<div id="featured"></div>';
$('#imageTable tbody tr td img').each(function(){
$(featured).append($(this).attr('src'));
});
$(featured).appendTo('#wrapper');
解决方法:
var $featured = $('<div id="featured"></div>');
$('#imageTable tbody tr td img').each(function(){
$featured.append($(this).attr('src')).append('<br />');
});
$featured.appendTo('#wrapper');
阐释:
当你在循环$(特色)中执行此操作时,它会为每个选定元素创建一个NEW div,因此只有最后一个div将附加到#wrapper.您需要在每个循环之外创建jQuery对象.
今天关于在通过jquery / Javascript大量添加新元素后,DOM是否立即就绪?的讲解已经结束,谢谢您的阅读,如果想了解更多关于Ajax HEAD通过Javascript / jQuery请求、JavaScript / jQuery是否总是拥有该元素的最新元素或版本?、javascript – FireFox扩展:如何通过jQuery访问页面元素?、javascript – jQuery在追加新元素之前填充内容的相关知识,请在本站搜索。
本文标签: