2013-03-12 96 views
1

我正在为我父亲的驾驶学校重写网站,将不必要的iframe和图像更改为html5和css3标记,并通过javascript和jquery改进了功能。从jquery/javascript下载卸载文档加载html头文件

现在,我为每个菜单项(对于搜索爬虫)都有一个完整的页面,而页眉和菜单大部分保持不变。这就是为什么我想要使用历史api,并改变内容和文档标题和描述,当一个链接被点击在启用了JavaScript的设备上时,所以不必进行整页刷新。

什么工作: - 让目标页面的#内容股利和它加载到当前页面 - 使用历史API展现出新的URL和popstate事件返回到以前的状态 - 修改内容从当前文档

html的头什么行不通的: - 从目标文件获得HTML头

应该有这样一个简单的功能,对不对?或者一个很好的方法来做到这一点?

+1

当您使用jQuery将它解析为html时,内容中省略了诸如'',''和''等标记。我建议改为定位特定标签,或者先将其解析为字符串,以便仅获取'' – 2013-03-12 14:53:09

+2

之间的内容代码,代码,为什么代码? – 2013-03-12 14:53:09

+0

你需要从''哪些内容?我假设你想要点击,所以你可以得到每个页面的'''' document.title' – <span class="text-secondary"> <small> <span>2013-03-12 14:55:56</span> </small> </span> </p> </div> </div> </div> </div> </div> </article> </div> <div class="answer-title"> <span class="text-logo margin-top-sm">A</span> <h2 class="title h4">回答</h2> </div> <div class="item-description text-md markdown-body margin-bottom-40 voidso"> <article class="board-top-1 padding-top-10"> <div class="post-col vote-info"> <span class="count">1<i class="fa fa-thumbs-up"></i></span> <i class="fa fa-check fa-2x"></i> </div> <div class="post-offset"> <div class="answer fmt"> <p>既然它是在同一个原点,你<em>可以</em>做到这一点。这有点尴尬,尽管它与jQuery在幕后使用其ajax <code class="prettyprint-override">load</code>(我预计jQuery使用文档片段而不是<code class="prettyprint-override">iframe</code>)不在一百万英里之外。</p> <p>基本上,你可以创建一个关闭页<code class="prettyprint-override">iframe</code>,内容页面加载到那里,然后提取任何你从它的需要,这样的事情(完全未经优化的):</p> <pre><code class="prettyprint-override">// I'm assuming you have a variable containing the content URL; I'll use `page` var page = "/ocazuc/2"; // Create the iframe, put it off-page, and put it in the DOM var iframe = $('<iframe>'); iframe.css({ position: "absolute", left: -10000 }).appendTo(document.body); // Hook the load event on it iframe.load(function() { // Get the document var $doc = $(iframe[0].contentDocument.documentElement); // Steal its content $doc.find("body").contents().appendTo(document.body); // And use its title or whatever else you want from the `head` document.title = $doc.find('title').text(); // Done with it iframe.remove(); }); // Start loading it iframe[0].src = page; </code></pre> <p><a href="http://jsbin.com/esapuf/1" rel="nofollow">Live Example</a> | <a href="http://jsbin.com/esapuf/1/edit" rel="nofollow">Source</a></p> </div> <div class="post-info"> <div class="post-meta row"> <p class="text-secondary col-lg-6"> <span class="source"> <a rel="noopener" target="_blank" href="https://stackoverflow.com/q/15365385">来源</a> </span> </p> <p class="text-secondary col-lg-6"> <span class="float-right date"> <span>2013-03-12 15:31:31</span> </p> <p class="col-12"></p> <p class="col-12"></p></div> </div> <!-- comments --> <div class="comments"> <div itemprop="comment" class="post-comment"> <div class="row"> <div class="col-lg-1"><span class="text-secondary">+0</span></div> <div class="col-lg-11"> <p class="commenttext">谢谢,我要看看这是否有效! – <span class="text-secondary"> <small> <a rel="noopener" target="_blank" href="https://stackoverflow.com/users/2161281/">Gi11i4m</a></span> <span>2013-03-18 16:38:52</span> </small> </span> </p> </div> </div> </div> <div itemprop="comment" class="post-comment"> <div class="row"> <div class="col-lg-1"><span class="text-secondary">+0</span></div> <div class="col-lg-11"> <p class="commenttext">这可能不会比整页刷新更高效,因为您仍然在完成整个页面刷新过程中涉及很多事情,例如,设置一个全新的窗口环境和JS范围,获取和解析JS,CSS,图像,视频,其他iframe等。理想情况下,您希望将内容作为惰性,分离的DOM元素提取。 – <span class="text-secondary"> <small> <a rel="noopener" target="_blank" href="https://stackoverflow.com/users/127040/">greim</a></span> <span>2013-04-29 19:17:22</span> </small> </span> </p> </div> </div> </div> </div> </div> </article> <div> <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6208739752673518" data-ad-slot="4319274062" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <article class="board-top-1 padding-top-10"> <div class="post-col vote-info"> <span class="count">0<i class="fa fa-thumbs-up"></i></span> </div> <div class="post-offset"> <div class="answer fmt"> <p>在接受的答案下查看我的意见。基本上,使用这种方法有一些性能问题,这使我寻找更好的方法。为此,我调整了麻省理工学院许可和书面咖啡脚本的rails turbolinks项目中找到的方法。值得信赖的是他们解决一些浏览器兼容性问题。</p> <p><a href="https://github.com/rails/turbolinks" rel="nofollow">https://github.com/rails/turbolinks</a></p> <pre><code class="prettyprint-override">/* * A function that takes a string of HTML and returns a document object. */ var parseDocument = (function() { function createDocumentUsingParser(html) { return (new DOMParser()).parseFromString(html, 'text/html'); } function createDocumentUsingDOM(html) { var doc = document.implementation.createHTMLDocument(''); doc.documentElement.innerHTML = html; return doc; } function createDocumentUsingWrite(html) { var doc = document.implementation.createHTMLDocument(''); doc.open('replace'); doc.write(html); doc.close(); return doc; } /* * Use createDocumentUsingParser if DOMParser is defined and natively * supports 'text/html' parsing (Firefox 12+, IE 10) * * Use createDocumentUsingDOM if createDocumentUsingParser throws an exception * due to unsupported type 'text/html' (Firefox < 12, Opera) * * Use createDocumentUsingWrite if: * - DOMParser isn't defined * - createDocumentUsingParser returns null due to unsupported type 'text/html' (Chrome, Safari) * - createDocumentUsingDOM doesn't create a valid HTML document (safeguarding against potential edge cases) */ var parser; if (window.DOMParser) { try { var testDoc = createDocumentUsingParser('<html><body><p>test'); if (testDoc && testDoc.body && testDoc.body.childNodes.length === 1) { parser = createDocumentUsingParser; } } catch(ex) { parser = createDocumentUsingDOM; } } if (!parser) { parser = createDocumentUsingWrite; } return parser; })(); </code></pre> <p>那么想必例如,你可以这样做:</p> <pre><code class="prettyprint-override">var doc = parseDocument(wadOfHtml); var title = doc.title; var $content = $(doc).find('#content'); </code></pre> <p>被警告,我没有验证为自己的代码是否正确,我要脱铁轨项目的信誉。我还没有验证我的咖啡改编是否没有引入语法或其他错误。我从字面上甚至还没有运行它;我只是乐观。</p> </div> <div class="post-info"> <div class="post-meta row"> <p class="text-secondary col-lg-6"> <span class="source"> <a rel="noopener" target="_blank" href="https://stackoverflow.com/q/16289855">来源</a> </span> </p> <p class="text-secondary col-lg-6"> <span class="float-right date"> <span>2013-04-29 23:24:47</span> <a rel="noopener" target="_blank" href="https://stackoverflow.com/users/127040/">greim</a></span> </p> <p class="col-12"></p> <p class="col-12"></p></div> </div> </div> </article> </div> <div class="clearfix"> </div> <div class="relative-box"> <div class="relative">相关问题</div> <ul class="relative_list"> <li> 1. <a href="http://cn.voidcc.com/question/p-kykrfofh-s.html" target="_blank" title="从文本中加载html文档"> 从文本中加载html文档 </a> </li> <li> 2. <a href="http://cn.voidcc.com/question/p-nvhbzfrn-gb.html" target="_blank" title="卸载加载Headjs的JS文件"> 卸载加载Headjs的JS文件 </a> </li> <li> 3. <a href="http://cn.voidcc.com/question/p-vbbvzvuq-eo.html" target="_blank" title="HTML下载文件"> HTML下载文件 </a> </li> <li> 4. <a href="http://cn.voidcc.com/question/p-kxtyftyx-pc.html" target="_blank" title="下载HTML文件"> 下载HTML文件 </a> </li> <li> 5. <a href="http://cn.voidcc.com/question/p-msnxdlun-rz.html" target="_blank" title="下载HTML文件"> 下载HTML文件 </a> </li> <li> 6. <a href="http://cn.voidcc.com/question/p-hzjfpzdc-dv.html" target="_blank" title="从.res文件加载HTML"> 从.res文件加载HTML </a> </li> <li> 7. <a href="http://cn.voidcc.com/question/p-vvkudosh-hz.html" target="_blank" title="不从html文档加载图像?"> 不从html文档加载图像? </a> </li> <li> 8. <a href="http://cn.voidcc.com/question/p-osmlrthb-rt.html" target="_blank" title="从Sugarcrm下载文档"> 从Sugarcrm下载文档 </a> </li> <li> 9. <a href="http://cn.voidcc.com/question/p-yuxcxzex-hm.html" target="_blank" title="加载/卸载利用加载外部文件"> 加载/卸载利用加载外部文件 </a> </li> <li> 10. <a href="http://cn.voidcc.com/question/p-fmjfnrhj-rh.html" target="_blank" title="php pdf文件下载:无法加载PDF文档"> php pdf文件下载:无法加载PDF文档 </a> </li> <li> 11. <a href="http://cn.voidcc.com/question/p-qjapgbjc-qt.html" target="_blank" title="将网页html下载到html文档"> 将网页html下载到html文档 </a> </li> <li> 12. <a href="http://cn.voidcc.com/question/p-nriaobvn-ka.html" target="_blank" title="从另一个文件加载HTML下载菜单"> 从另一个文件加载HTML下载菜单 </a> </li> <li> 13. <a href="http://cn.voidcc.com/question/p-askiogsm-kc.html" target="_blank" title="如何从Firebase下载HTML文件并加载到webview?"> 如何从Firebase下载HTML文件并加载到webview? </a> </li> <li> 14. <a href="http://cn.voidcc.com/question/p-ourwcdgm-rm.html" target="_blank" title="xpages从文档加载json"> xpages从文档加载json </a> </li> <li> 15. <a href="http://cn.voidcc.com/question/p-zduggdjx-vk.html" target="_blank" title="DocuSign - 文档下载"> DocuSign - 文档下载 </a> </li> <li> 16. <a href="http://cn.voidcc.com/question/p-pgyyzafn-cu.html" target="_blank" title="下载Drupal文档?"> 下载Drupal文档? </a> </li> <li> 17. <a href="http://cn.voidcc.com/question/p-ogggokwo-pb.html" target="_blank" title="下载XML文档"> 下载XML文档 </a> </li> <li> 18. <a href="http://cn.voidcc.com/question/p-oelrgqwk-oo.html" target="_blank" title="C#加载/卸载插件"> C#加载/卸载插件 </a> </li> <li> 19. <a href="http://cn.voidcc.com/question/p-hxvgbeio-dr.html" target="_blank" title="Swift3:如何从文档目录加载html文件到WKWebview"> Swift3:如何从文档目录加载html文件到WKWebview </a> </li> <li> 20. <a href="http://cn.voidcc.com/question/p-bewiyepy-un.html" target="_blank" title="Angular 4在文档头部加载circle.css"> Angular 4在文档头部加载circle.css </a> </li> <li> 21. <a href="http://cn.voidcc.com/question/p-hoevjljx-ms.html" target="_blank" title="jQuery的AJAX加载/卸载HTML + JavaScript的"> jQuery的AJAX加载/卸载HTML + JavaScript的 </a> </li> <li> 22. <a href="http://cn.voidcc.com/question/p-epjlqzfx-pe.html" target="_blank" title="Android下载html文件"> Android下载html文件 </a> </li> <li> 23. <a href="http://cn.voidcc.com/question/p-skzxrxnr-sy.html" target="_blank" title="html下载文件参数"> html下载文件参数 </a> </li> <li> 24. <a href="http://cn.voidcc.com/question/p-ksshwhnb-a.html" target="_blank" title="加载XML文档"> 加载XML文档 </a> </li> <li> 25. <a href="http://cn.voidcc.com/question/p-txcgyuqz-mx.html" target="_blank" title="下载PHP/HTML/CSS到PDF文档"> 下载PHP/HTML/CSS到PDF文档 </a> </li> <li> 26. <a href="http://cn.voidcc.com/question/p-ycwrbgts-kh.html" target="_blank" title="PowerPoint - 在文档加载时加载宏?"> PowerPoint - 在文档加载时加载宏? </a> </li> <li> 27. <a href="http://cn.voidcc.com/question/p-bawvanvq-rq.html" target="_blank" title="iOS从url下载html文件"> iOS从url下载html文件 </a> </li> <li> 28. <a href="http://cn.voidcc.com/question/p-odilhkgn-up.html" target="_blank" title="使用Retrofit从URL下载HTML文件"> 使用Retrofit从URL下载HTML文件 </a> </li> <li> 29. <a href="http://cn.voidcc.com/question/p-pvuolbba-oo.html" target="_blank" title="PHP下载的文档文件"> PHP下载的文档文件 </a> </li> <li> 30. <a href="http://cn.voidcc.com/question/p-hckszcuf-kr.html" target="_blank" title="PHP:发送WORD文档文件下载"> PHP:发送WORD文档文件下载 </a> </li> </ul> </div> <div> <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-6208739752673518" data-ad-slot="3534119089"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="padding-top-10"></div> </div> </div> <script type="text/javascript" src="http://img2.voidcc.com/voidso/script/side.js?t=1652515421853"></script> <script type="text/javascript" src="http://img2.voidcc.com/voidso/plugin/highlight/highlight.pack.js"></script> <link href="http://img2.voidcc.com/voidso/plugin/highlight/styles/docco.css" media="screen" rel="stylesheet" type="text/css" /> <script type="text/javascript"> $('pre').each(function(i, e) { hljs.highlightBlock(e, "<span class='indent'> </span>", false) }); </script> <div class="col-lg-3 col-md-4 col-sm-5"> <div id="rightTop"> <div class="row sidebar panel panel-default"> <div class="panel-heading font-bold"> 每日一句 </div> <div class="panel-body m-b-sm m-t-sm clearfix"> 每一个你不满意的现在,都有一个你没有努力的曾经。 </div> </div> <div class="row"> <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <!-- VOIDCC问答侧边栏广告 --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6208739752673518" data-ad-slot="3862022848" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="row sidebar panel panel-default"> <div class="panel-heading font-bold"> 最新问题 </div> <div class="m-b-sm m-t-sm clearfix"> <ul class="side_article_list"> <li class="side_article_list_item"> 1. <a href="http://cn.voidcc.com/question/p-elhacwns-bca.html" target="_blank" title="AlertView弹出两次单按钮"> AlertView弹出两次单按钮 </a> </li> <li class="side_article_list_item"> 2. <a href="http://cn.voidcc.com/question/p-kdsloxnp-uu.html" target="_blank" title="Kafka Streams:使用相同的`application.id`来消费多个主题"> Kafka Streams:使用相同的`application.id`来消费多个主题 </a> </li> <li class="side_article_list_item"> 3. <a href="http://cn.voidcc.com/question/p-hkspxhzj-ut.html" target="_blank" title="同时具有自定义功能和任务窗格"> 同时具有自定义功能和任务窗格 </a> </li> <li class="side_article_list_item"> 4. <a href="http://cn.voidcc.com/question/p-rjumxxom-us.html" target="_blank" title="Squarespace:在移动设备上只"> Squarespace:在移动设备上只 </a> </li> <li class="side_article_list_item"> 5. <a href="http://cn.voidcc.com/question/p-ovwgxidv-us.html" target="_blank" title="Xamarin Android RelativeLayout设计器设置"> Xamarin Android RelativeLayout设计器设置 </a> </li> <li class="side_article_list_item"> 6. <a href="http://cn.voidcc.com/question/p-pbusixlv-ur.html" target="_blank" title="制作一个黑暗的崩溃的导航栏视觉上不同"> 制作一个黑暗的崩溃的导航栏视觉上不同 </a> </li> <li class="side_article_list_item"> 7. <a href="http://cn.voidcc.com/question/p-xixoyaot-bcq.html" target="_blank" title="在字符串中添加一行"> 在字符串中添加一行 </a> </li> <li class="side_article_list_item"> 8. <a href="http://cn.voidcc.com/question/p-botfbdds-bbu.html" target="_blank" title="tkinter画布在框架"> tkinter画布在框架 </a> </li> <li class="side_article_list_item"> 9. <a href="http://cn.voidcc.com/question/p-gqikldrz-bbo.html" target="_blank" title="使用Java Rally Rest API向测试集添加200多个测试用例"> 使用Java Rally Rest API向测试集添加200多个测试用例 </a> </li> <li class="side_article_list_item"> 10. <a href="http://cn.voidcc.com/question/p-anuajaun-bak.html" target="_blank" title="自举应用程序向导中的滚动条"> 自举应用程序向导中的滚动条 </a> </li> </ul> </div> </div> </div> <p class="article-nav-bar"></p> <div class="row sidebar article-nav"> <div class="row box_white visible-sm visible-md visible-lg margin-zero"> <div class="top"> <h3 class="title"><i class="glyphicon glyphicon-th-list"></i> 相关问题</h3> </div> <div class="article-relative-content"> <ul class="side_article_list"> <li class="side_article_list_item"> 1. <a href="http://cn.voidcc.com/question/p-kykrfofh-s.html" target="_blank" title="从文本中加载html文档"> 从文本中加载html文档 </a> </li> <li class="side_article_list_item"> 2. <a href="http://cn.voidcc.com/question/p-nvhbzfrn-gb.html" target="_blank" title="卸载加载Headjs的JS文件"> 卸载加载Headjs的JS文件 </a> </li> <li class="side_article_list_item"> 3. <a href="http://cn.voidcc.com/question/p-vbbvzvuq-eo.html" target="_blank" title="HTML下载文件"> HTML下载文件 </a> </li> <li class="side_article_list_item"> 4. <a href="http://cn.voidcc.com/question/p-kxtyftyx-pc.html" target="_blank" title="下载HTML文件"> 下载HTML文件 </a> </li> <li class="side_article_list_item"> 5. <a href="http://cn.voidcc.com/question/p-msnxdlun-rz.html" target="_blank" title="下载HTML文件"> 下载HTML文件 </a> </li> <li class="side_article_list_item"> 6. <a href="http://cn.voidcc.com/question/p-hzjfpzdc-dv.html" target="_blank" title="从.res文件加载HTML"> 从.res文件加载HTML </a> </li> <li class="side_article_list_item"> 7. <a href="http://cn.voidcc.com/question/p-vvkudosh-hz.html" target="_blank" title="不从html文档加载图像?"> 不从html文档加载图像? </a> </li> <li class="side_article_list_item"> 8. <a href="http://cn.voidcc.com/question/p-osmlrthb-rt.html" target="_blank" title="从Sugarcrm下载文档"> 从Sugarcrm下载文档 </a> </li> <li class="side_article_list_item"> 9. <a href="http://cn.voidcc.com/question/p-yuxcxzex-hm.html" target="_blank" title="加载/卸载利用加载外部文件"> 加载/卸载利用加载外部文件 </a> </li> <li class="side_article_list_item"> 10. <a href="http://cn.voidcc.com/question/p-fmjfnrhj-rh.html" target="_blank" title="php pdf文件下载:无法加载PDF文档"> php pdf文件下载:无法加载PDF文档 </a> </li> </ul> </div> </div> </div> </div> </div> </div> </div><!-- wrap end--> <!-- footer --> <footer id="footer"> <div class="bg-simple lt"> <div class="container"> <div class="row padder-v m-t"> <div class="col-xs-8"> <ul class="list-inline"> <li><a href="http://cn.voidcc.com/contact">联系我们</a></li> <li>© 2020 CN.VOIDCC.COM</li> <li><a rel="nofollow" href="https://beian.miit.gov.cn/" target="_blank">沪ICP备13005482号-13</a></li> <li><script type="text/javascript" src="https://s9.cnzz.com/z_stat.php?id=1280098168&web_id=1280098168"></script></li> <li><a href="http://cn.voidcc.com/" target="_blank" title="程序问答园区">简体中文</a></li> <li><a href="http://hk.voidcc.com/" target="_blank" title="程序問答園區">繁體中文</a></li> <li><a href="http://ru.voidcc.com/" target="_blank" title="поле вопросов и ответов">Русский</a></li> <li><a href="http://de.voidcc.com/" target="_blank" title="Frage - und - antwort - Park">Deutsch</a></li> <li><a href="http://es.voidcc.com/" target="_blank" title="Preguntas y respuestas">Español</a></li> <li><a href="http://hi.voidcc.com/" target="_blank" title="कार्यक्रम प्रश्न और उत्तर पार्क">हिन्दी</a></li> <li><a href="http://it.voidcc.com/" target="_blank" title="IL Programma di chiedere Park">Italiano</a></li> <li><a href="http://ja.voidcc.com/" target="_blank" title="プログラム問答園区">日本語</a></li> <li><a href="http://ko.voidcc.com/" target="_blank" title="프로그램 문답 단지">한국어</a></li> <li><a href="http://pl.voidcc.com/" target="_blank" title="program o park">Polski</a></li> <li><a href="http://tr.voidcc.com/" target="_blank" title="Program soru ve cevap parkı">Türkçe</a></li> <li><a href="http://vi.voidcc.com/" target="_blank" title="Đáp ứng viên">Tiếng Việt</a></li> <li><a href="http://fr.voidcc.com/" target="_blank" title="Programme interrogation Park">Française</a></li> </ul> </div> </div> </div> </div> </div> </footer> <!-- / footer --> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-77509369-5"></script> <script> window.dataLayer = window.dataLayer || []; function gtag() { dataLayer.push(arguments); } gtag('js', new Date()); gtag('config', 'UA-77509369-5'); </script> <script> var _hmt = _hmt || []; (function () { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?67d4731349f0b00136755b80364ce381"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> </body> </html>