代码之家  ›  专栏  ›  技术社区  ›  CodeFinity

如何选择放置在带有appendChild的跨度内的img?

  •  0
  • CodeFinity  · 技术社区  · 11 年前

    我正在使用picturefill.js(Scott Jehl): https://github.com/scottjehl/picturefill/blob/master/picturefill.js

    以下是我如何设置它的,(一些代码省略了b/c,这只是更多的媒体查询内容)使用span标签和数据属性,如他的文档中所示:

    <figure>
        <a href='http://www.casaromeromexican.com'>
            <span id="picture" data-picture data-alt="Casa Romero Mexican website">
            <span data-src="img/casa-romero-mexican.jpg"></span>
            <span data-src="img/casa-romero-mexican@2x.jpg" data-media="(min-device-pixel-ratio: 2.0)"></span>
            <span data-src="img/casa-romero-mexican-md.jpg" data-media="(min-width: 768px") </span> 
    // and so on...
    

    正如预期的那样,正在加载正确的img并将其放置在页面上。以下是生成的HTML的一个片段:

    <span data-src="img/casa-romero-mexican-md.jpg" data-media="(min-width: 768px)"><img alt="Casa Romero Mexican website" src="img/casa-romero-mexican-md.jpg"></span>
    

    我想做的是向最终生成的img标记添加一个类。

    然而,我甚至无法选择附加的img!以下是我正在使用的内容:

    alert(($('#picture').children().find('img').size()));
    

    即使图像在页面上,也会返回0。我预计它会根据媒体查询返回1,b/c的大小,其中1张图像会用picturefill附加到页面上。

    为了确保DOM加载没有问题,我在页眉中放置了picturefill.js(尽管js大部分时间都应该放在页脚中),甚至这样做了:

    $(document).ready(function() {
            alert('ready!');
            alert(($('#picture').children().find('img').size()));
            });
    

    似乎仍然找不到img。

    1 回复  |  直到 11 年前
        1
  •  0
  •   CodeFinity    11 年前

    http://learn.jquery.com/using-jquery-core/document-ready/

    看完这篇文章后,我明白了为什么jQuery找不到img。在这种情况下,有必要使用$(window).load(function(){…})。这将在加载整个页面之前不会运行脚本,而不是只等待DOM的$(document).ready()。

    换句话说,$(document).ready()在大多数情况下都很好,但在等待可能需要更长时间才能加载和/或需要通过请求获取的媒体元素时就不行了!