【问题标题】:With jQuery, can we actually refer to elements from a separate HTML file?使用 jQuery,我们真的可以从一个单独的 HTML 文件中引用元素吗?
【发布时间】:2014-07-23 06:21:27
【问题描述】:

我正在尝试在我的 main.html 中创建一个标签栏视图,因此当我点击不同的标签时页面中的一个部分会切换。

只是想保持代码干净,我希望从单独的 HTML 文件中编写剖面视图并“导入”它们。

现在,我知道有一种方法可以将 HTML 导入为

<link rel="import" href="tab1.html">

在tab1.html里面,是这样的

<!DOCTYPE html>
<html>
    <head>
        <meta charset="ISO-8859-1">
        <title>Insert title here</title>
    </head>
    <body>
        <div>
            <h1 id="sectionDiv">test test</h1>
        </div>
    </body>
</html>

但是在我的 main.html 中,我无法找到 $("#sectionDiv") 的 text() 值。 JQuery 适用于其他事情,因此 jQuery 设置不应该有问题。而且我猜我在导入 HTML 时做错了什么。

谁能帮忙指出来?

补充说明

我的 main.html 代码

<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
    <title>Main Page</title>
    <link rel="import" href="carpools.html">
    <link rel="stylesheet" href="main.css"/>
    <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.20/angular.min.js"></script>
    <script src="main.js"></script>
</head>
<body>
<div id="container">
    <div id="tabBar">
        <ul id="tabBarList">
            <li><a href="#" onclick="switchTab(0)">Tab1</a></li>
            <li><a href="#" onclick="switchTab(1)">Tab2</a></li>
            <li><a href="#" onclick="switchTab(2)">Tab3</a></li>
            <li><a href="#" onclick="switchTab(3)">Tab4</a></li>
            <li><a href="#" onclick="switchTab(4)">Tab5</a></li>
        </ul>           
    </div>


</div>
</body>
</html>

onclick 函数 switchTab() 旨在将不同的剖面视图 (id="sectionDiv") 带到主视图。但显然它无法识别它..

【问题讨论】:

  • 这对我来说不是很清楚。我希望你问像ajax
  • 不,只有在当前 DOM 中加载的元素是可访问的。如果要访问当前页面外部的元素,则需要通过 AJAX 加载。
  • @yeshansachithak 我添加了更多代码。看看你是否更清楚?谢谢
  • @RoryMcCrossan 你的意思是这样吗? api.jquery.com/load
  • 这样也行,$.ajax$.post。在所有这些的回调中,您可以在返回的 HTML 上使用 jQuery 函数。

标签: javascript jquery html import


【解决方案1】:

试试吧!这是你要找的吗

这是 main.html。我将其称为 index.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">
    <title>Bootstrap 101 Template</title>
    <!-- Bootstrap -->
    <link href="css/bootstrap.min.css" rel="stylesheet">
    <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
      <style type="text/css">
          #tabBarList li {
              cursor: pointer;
          }
      </style>
  </head>
  <body>
      <div id="container">
          <div id="tabBar">
              <ul id="tabBarList">
                  <li><a class="menu" link="index.html">Tab1</a></li>
                  <li><a class="menu" link="/">Tab2</a></li>
                  <li><a class="menu" link="about.html">Tab3</a></li>
                  <li><a class="menu" link="/">Tab4</a></li>
              </ul>
          </div><!--end #container-->

          <section id="contents">
            <p>Other pages contents will loads to here.</p>
        </section><!--end #contents-->
      </div>

      <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
      <!-- Include all compiled plugins (below), or include individual files as needed -->
      <script src="js/bootstrap.min.js"></script>
      <script type="text/javascript">
          $(document).ready(function(){
              //alert("K");
              $(".menu").click(function(){
                var url = $(this).attr("link");
                //alert(url);
                //$( "#contents" ).fadeIn("slow").load(url+" #contents");
                $('#contents').fadeOut('slow', function(){
                    $('#contents').load(url+' #contents', function(){
                        $('#contents').fadeIn('slow');
                    });
                });
            });
          });
      </script>
  </body>
</html>

这是Tab3 页面。我将其称为 about.html

<section id="contents">
    <p>About Page Loaded</p>
</section>

试试这个。

如果您有任何疑问或疑虑,请告诉我。 如果你需要我的帮助。请通过搜索yeshansachithak找到我的任何社交网络。

【讨论】:

  • 谢谢!我还有一个问题,您是在本地服务器上运行它吗?我只创建了 2 个 HTML 文件,然后在浏览器上打开 index.html。它有点工作 - Tab1 和 Tab3 旨在引入外部内容,但它是否有效取决于我使用的浏览器。这让我想起了我之前遇到的一个问题,如果您不在服务器上运行 HTML,则某些事情的工作方式会有所不同,这就是我想确认的原因。
  • @ChrisZ 很高兴收到您的来信。不要混淆。如果您使用的是服务器端脚本。你需要一个服务器。如果您使用的是非服务器端脚本。不需要任何服务器。我想你必须学习很多东西。我和你一样。你会比我更好。另外,请您投票支持我的答案。
  • 抱歉,我还没有足够的声望来投票。但是让我编辑我的帖子以表明它已经解决了!
  • 不要那样编辑它。现在你可以投票给我的答案。我会投票赞成你的。谢谢
猜你喜欢
  • 1970-01-01
  • 2016-01-19
  • 2016-12-05
  • 2021-06-07
  • 1970-01-01
  • 2017-05-29
  • 1970-01-01
  • 2016-04-09
  • 2014-01-01
相关资源
最近更新 更多