老师好,关于想问个关于js生成dom的问题

老师好,关于想问个关于js生成dom的问题

$(function(){})

之前我问过一个问题就是右侧边恋母为什么直接consloe.log不可以直接获取data的数据,老师给的回答是因为ajax的获取是异步的,也就是console.log如果不是在dom生成的函数中,是没有办法确保console.log是在dom生成之后再执行,也就无法获取data,那么我想如果在console.log外面包裹一层$(function(){}),能否对js中生成的dom结构进行识别并在所有js中生成的dom结构之后再执行$(function(){})内部的函数

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,是异步加载的问题,使用定时器输出可以,但是$(function(){})输出是不可以的。$(function(){})指的是页面默认有的html内容加载完成,而当js中数据填充到页面之后不会再次执行$(function(){})方法。自己可以输出试一下,结果为undefined。

祝学习愉快!

好帮手慕星星 2020-07-09 11:56:59

同学你好,data数据指的是通过ajax获取到的数据,还是通过data()方法挂载到元素上的数据?

建议描述具体一些,想要在哪里直接输出数据,可以截图粘贴上来,老师这边测试下,便于帮助解决。

祝学习愉快!

  • 提问者 慕雪9296518 #1
    function initRightList(data){ $('.right_list_inner').html(''); data.forEach(function(item){ if (!item.chooseCount) { item.chooseCount = 0; } var str = itemTmpl.replace("$href",item.picture) .replace("$name",item.name) .replace("$description",item.description) .replace("$praise_content",item.praise_content) .replace("$price",item.min_price) .replace("$count",item.chooseCount) .replace("$unit",item.unit) var $target = $(str); $target.data('itemData',item); $('.right_list_inner').append($target); }); } console.log($(inner_item).data('itemData')) 比如这里我要是在函数外部用$(inner_item).data('itemData')获取data就是不成功的,因为好像是说存在异步加载问题,即使js中我是放在函数之后再输出的,但是其实此时dom结构还没有加载出来,就是实际比console.log还是慢一拍,之前老师说可以用settimeout的方法是管用的,那我想用$(function(){})这种方式就是类似于等所有dom结构ready之后再console.log这样管用吗
    2020-07-09 12:03:52
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
3.WebAPP开发与小程序
  • 参与学习           人
  • 提交作业       622    份
  • 解答问题       6815    个

微信带火了小程序,也让前端工程师有了更多的展现机会,本阶段带你从移动基础知识的学习到webAPP开发,及小程序开发,让你PC端与移动端两端通吃。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师