在动态html页面中引入另一个Doctype?

时间:2014-03-12 02:07:57

标签: javascript jquery ajax dynamic load

我试图使用jquery .load()加载页面的一部分,链接是一个带有手动编写脚本的jquery代码的唯一.php页面,但我遇到两个问题:

  1. 之前加载的jquery插件将不再有效,我需要在head标签中重新加载它们,我需要添加一个head标签来做到这一点......

  2. 我的.php代码会生成一个错误,因为.php文件并不是单独加载的,而是像index.php一样整体加载,但我不想要整个页面要刷新......

  3. 可以在html div中加载新的Doctype,还是有更好的做法,如下所示:

    <!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>Default</title>
    <script><!--jquery library here--></script>
    <script><!--jquery slidwshow plugin--></script>
    </head>
    
    <body>
    <div class="header">header template here</div>
    <div class="content">
    
        <!--dynamic html with doctype-->
        <!doctype html>
        <html>
        <head>
        <meta charset="utf-8">
        <title>Default</title>
        </head>
            <body>
                <div>dynamic content loaded here</div>
            </body>
        </html>
        <!--end dynamic html with doctype-->
    
    </div>
    <div class="footer">footer template footer</div>
    </body>
    </html>
    

    感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

不,DOCTYPE只能在页面顶部声明。 (还有第一个非空白字符)

为了让生活变得如此有趣,iframes由不同的浏览器以不同的方式处理。

IE的某个版本允许iframe设置自己的DOCTYPE,其他版本则从父框架继承。

我无法回想起哪些版本可以做到,但我记得之前遇到过这个问题。

修改

AH,在这里找到了一个讨论 - 似乎是IE9,其中iframe继承自父母:

DOCTYPE, iFrames, HTML5 - together

答案 1 :(得分:0)

如果您的网站是模块化的,您可以在模块中定义doctype。让页面加载检查模块doctype,然后在标题中使用switch语句。

   global $somemodulename;

   if (($somemodulename == Music)    
   { 
     if(@file_exists(module/somemodulename/includes/doctype.php'))
     {                                                                                                   
       require_once(module/somemodulename/includes/doctype.php');
     }
   }

解析上面的doctype.php加载模块子文件夹可以做很多不同我只是想解释这个概念。

   switch ($doctype) 
   {
     case 'HTML':
     $output =  '<!DOCTYPE html>'."\n";
     $output .= '<meta charset="UTF-8">'."\n";
     define('DOCTYPE', 'HTML');
     break; 
     case 'strict':
     $output =  '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">';
     define('DOCTYPE', 'strict');
     break;
     case 'transitional':
     $output = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">';
     define('DOCTYPE', 'transitional');
     break;
     case 'frameset':
     $output = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">';
     define('DOCTYPE', 'frameset');
     break;
     case 'math':
     $output = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN" "http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd">';
     define('DOCTYPE', 'math');
     break;
     case 'xhtml11':
     $output =  '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">';
     define('DOCTYPE', 'xhtml11');
     break;
     case 'default':
     $output = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">';
     define('DOCTYPE', 'transitional');
     break;
   }

我已经在PHP-Nuke Titanium中使用它,它工作正常。我的代码更精细,但你得到了我所说的要点。我使用doctype开关来测试浏览器代码。我从浏览器工作台上拿了它。这用于制作由其他人编写的与PHP-Nuke Titanium兼容的旧模块。

如果您的网站不是模块化的,您可以拥有标题,以便将其分开调用。这样,每个页面加载设置模块名称页面名称,标题会动态调用开关。

您可以将PHP代码嵌入HTML和反之亦然:)

这个概念可以用来做你所要求的。我知道这篇文章很老,但我们都需要分享我们的想法。干杯