【问题标题】:Is there an "element ready" function in jquery?jquery 中是否有“元素就绪”功能?
【发布时间】:2013-04-15 23:25:37
【问题描述】:

我有一个元素,它有一个 CSS 边框,问题是元素是空的,直到内容被 jQuery 填充,但边框从一开始就是由 CSS 绘制的。我希望能够做类似的事情 隐藏元素可见性,直到它准备好显示 然后一次性显示元素和边框。

有什么方法可以实现吗?

编辑:显示内容的代码包含在里面

$(window).load(function() {

}

【问题讨论】:

  • 你想什么时候显示元素?有什么特别的活动吗?
  • 我的编辑回答了吗?

标签: jquery css


【解决方案1】:

方法一

您可以尝试的一种方法是将元素的 CSS 设置为 display:none;。这会隐藏元素,调用以下函数会导致元素在 DOM 加载时显示。

$(document).ready(function () {
  // Put all of jQuery code in here
  $("element").show(); // substitute element for whatever is needed
});

不过我不建议使用这种方法,因为一旦jQuery执行就会出现内容的突然跳转,因为display:none;表示页面上不会有元素的踪迹

方法二

我认为最好的方法是使用visibility:hidden。这将导致元素通常仍然出现的空间,但将有空白代替元素。这样,当页面加载时,内容不会突然跳转。如果使用这种方法,则需要使用.css()方法,因为.show()本质上是将元素的CSS设置为display:block;所以代码会是这样的

$(document).ready(function () {
  // Put all of jQuery code in here
  $("element").css("visibility", "visible") // substitute element for whatever is needed
});

对于这两种方法,CSS 都会隐藏元素,并且该函数会等待整个 DOM 加载完毕后再执行。

【讨论】:

  • +1 我喜欢这个,但如果这是一次性元素,我可能会设置内联 style='display:none' 而不是 CSS 可见性。
  • 我可以把 doc.ready 的东西放在 window.load 里面还是应该放在外面。真的只是想知道将代码保留在原始代码旁边,因为我在同一个加载块中有很多其他相关的东西
  • @AaronLS 类比内联元素更好用
  • @byronyasgur 应该在外面。就像 window.load 只是定义了一个事件处理程序一样,document.ready 也定义了一个事件处理程序。您要确保在 doc.ready 发生之前定义了 doc.ready 事件处理程序,因此不应将其嵌套在另一个处理程序中。
  • @byronyasgur 您可以在document.ready 块中添加您想要的任何代码
【解决方案2】:

您可以使用 jQuery addClass 添加获取边框的样式,或者使用 removeClass 删除隐藏的类 display:none;

要回答你的标题问题,你要找的是document.ready

【讨论】:

    【解决方案3】:

    最初隐藏您的项目。

     $(function(){
        $('selector').hide(); // Or you can just have display:none
        });
    

    在其他部分中,某些事件会在您的 div 中填充一些内容

    ....
    ....//some code that fills in your content
    ...
    $('selector').show();
    ....
    ....
    

    【讨论】:

      【解决方案4】:

      Ready on 元素将起作用:

      $(document.getElementsByTagName('div')[0]).ready(function() {
      // do stuff when div is ready
      

      【讨论】:

        【解决方案5】:

        你可以使用

        $(function(){
          // your code here
        });
        

        所以上面的内容会在 DOM 加载时执行。现在您需要做的就是显示在 css 中设置了 visibility:hidden 的元素。

        【讨论】:

        • 当你使用 display:none 时,元素实际上并没有被加载。这就是为什么许多人建议使用可见性:隐藏代替。 display:none 也不占用 dom 空间,而 visibility:hidden 和 opacity:0 都占用。
        【解决方案6】:

        试试这个:

        $('#element').bind("DOMSubtreeModified", function () {
            //do stuff
        });
        

        【讨论】:

        【解决方案7】:

        你试过.css()吗?您可以更改元素的 css。 阅读更多here

        最初,将其设置为隐藏,然后将其删除。

        【讨论】:

        • 我明白了。 Cody Guldner 的回答是正确的方法!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多