js抓取网页内容(什么是JS的元素,你知道吗?(一))

优采云 发布时间: 2021-10-18 15:02

  js抓取网页内容(什么是JS的元素,你知道吗?(一))

  在编写JS或者JQuery的时候,在使用$("#btn1")或者Domcument.getElementById获取相关标签元素时,偶尔会出现获取不到对应元素的情况。报如下错误等:

  无法读取空错误的属性“XXX”

  无法读取未定义的属性“可见性”

  其实这个问题只有一个原因,就是没有获取到对应的标签元素值,也就是$("#btn1")获取的值为null,所以当你获取到这个元素下的属性时,自然会报错,出现这种情况的原因可能如下。

  1.Html页面还未加载,在元素加载前调用元素

  根据html页面的特点,从上到下依次加载,即遇到什么就加载什么。因此,有可能在页面的 DOM 元素之前加载 JS 方法。

  如果此时提前调用了JS方法,由于label元素还没有加载,所以找不到对应的元素,所以会报这个找不到元素的错误。

  这种错误的解决方法也很简单,只需:

  将对应的JS代码放在html页面的最后,在label元素加载完成后调用对应的JS方法。

  或使用:

  JS window.onload() 方法

  onload 事件将在指令页面上的所有元素(包括图像和其他文件)加载完成后立即发生。

  JQuery 的 ready() 方法

  ready 事件将在文档结构加载后立即发生(不包括图片等非文本媒体文件)。

  思路是让JS方法在页面完全加载后运行,这样就可以保证一定要加载相应的元素。

  2.多层iframe嵌套,无法获取iframe不同层次的元素

  当整个 HTML 页面使用多层 iframe 嵌套时,很容易找到对应内部 iframe 中的元素。

  当我们获取元素时,我们会默认在外层 iframe 中找到该元素。如果是多层嵌套的iframe页面,那么当我们想要在内部iframe中查找元素时,需要切换到iframe ID指定的iframe层中,重新获取该元素。

  var obj=document.getElementById("Iframe").contentWindow;

  obj.document.getElementById("menu").style.visibility="hidden";//隐藏元素

  还有一种情况是被调用的JS方法在内部iframe中,而外部窗口没有对应的ID。

  可以使用window.parent方法获取当前窗口的父窗口,然后使用父窗口方法获取对应的元素。

  window.parent.document.getElementById("null_box").getElementsByTagName("input")[0].style.visibility="visible";//恢复元素

  当对应的label元素不可用时,记住一个前端的想法

  当元素标签不可用时,可以尝试查找元素标签的父标签。

  按照这个寻父的思路,一个一个的往上查找,当可以得到最外层的父级时,就可以按照这个层级关系依次往下查找这个元素。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线