【问题标题】:modify div height when script loaded加载脚本时修改 div 高度
【发布时间】:2019-11-23 09:27:17
【问题描述】:

我有一个使用 Bootstrap 和 Flask 构建的 Web 应用程序,它将 Bokeh 服务器文档加载到包含 div 中。 Bokeh 元素大小的响应行为取决于包含 div 的特定固定初始高度。我在包含我的自定义 css 的 style.css 文件中执行此操作:

.placeholderbokehapp {
  height: 1500px;
}

在 Bokeh 内容加载后,我想立即将 .placeholderbokehapp 的高度增加到 1700 像素以容纳其他元素。在 Chrome DevTools Network 选项卡中,我看到 Bokeh 内容加载了 autoload.js?bokeh-autoload-element=... 脚本,紧随其后的是 jquery 和其他需要的 js。

这里是base.html中的相关内容:

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

  <!-- Bootstrap CSS -->
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">

  <title>{% block title %}Snowpack Tracker{% endblock %}</title>

  <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">

  <link
    href="https://cdn.bokeh.org/bokeh/release/bokeh-1.0.4.min.css"
    rel="stylesheet" type="text/css">
  <link
    href="https://cdn.bokeh.org/bokeh/release/bokeh-widgets-1.0.4.min.css"
    rel="stylesheet" type="text/css">

  <script src="https://cdn.bokeh.org/bokeh/release/bokeh-1.0.4.min.js"></script>  
  <script src="https://cdn.bokeh.org/bokeh/release/bokeh-widgets-1.0.4.min.js"></script> 

</head>

<body>

  <div class="container-fluid">
    {% block header %}{% endblock %}

    {% block content %}{% endblock %}

    {% block footer %}{% endblock %}

  </div>

  <!-- jQuery first, then Popper.js, then Bootstrap JS -->
  <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
  <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>

</body>
</html>

使用 Flask,我渲染了以下模板:

{% extends 'base.html' %}

{% block header %}
{% include 'snowpacktracker/header.html' %}
{% endblock %}

{% block content %}
  <div class="placeholderbokehapp rounded" id="tbc-id">
        {{ wholebokehapp | safe }}
  </div>

{% endblock %}

{% block footer %}
{% include 'snowpacktracker/footer.html' %}
{% endblock %}

wholebokehapp 是从 URL 返回的 Bokeh 嵌入式服务器文档。

【问题讨论】:

    标签: javascript jquery html css


    【解决方案1】:

    你可以这样做,但可能有更好的方法

    $($('.placeholderbokehapp').css('height', '1700px'))
    

    【讨论】:

    • 这个打算放在哪里?
    • 我会将它放在包含该元素的网站上,但您也可以将它放在包含的脚本文件中
    • 不确定我是否关注。 “包含该元素的网站”?您打算将其放在脚本标记中、我的 base.html 中还是 Flask 模板 html 中?
    • 您应该在将模板加载到的文件中包含它,所以在您的 base.html 中是的
    【解决方案2】:

    如果 Bokeh 在 iframe html 标记中加载,那么您可以在 html 页面底部加载所有其他 js 脚本后编写脚本。

    <script>
        $('#tbc-id iframe').load(function(){
            $('#tbc-id').css({height: 1700}) //make container height to 1700px        
           $(this).css({height: 1700}) //make iframe height match the container
    
        });
    </script>
    

    【讨论】:

    • 我没有专门使用iframe。这会导致错误Uncaught TypeError: $(...).load is not a function。 Bokeh 只需加载问题中定义的包含 div。我是否需要修改以使用 iframe 才能使此解决方案正常工作?
    • 是的。 $('#tbc-id iframe').load(funnction(){}) 确保 iframe 内容已完全加载,然后应用新样式。
    猜你喜欢
    • 2012-01-17
    • 2014-03-26
    • 2011-11-26
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    相关资源
    最近更新 更多