2013-06-21 83 views
3

的命名空間對不起我的英語第一... :)管理多HTML片段

我用XMLNSHTML標籤,並與getElementsByTagNameNS針對他們在JS和使用CSS選擇xmlns\:tagNameCSS文件,在服務器端我使用DOMPHP對象DOMDocument::getElementsByTagNameNS ...

我想知道如果我做得很好,或者如果有一個有效的方法?這種邏輯可能會在未來導致我的問題?我不知道如何:DRUPALJOOMLA管理的事情?

或者你想,可能是我應該在PHP中使用正則表達式與preg_match_replace添加前綴在任何HTML屬性,做同樣的JS文件和CSS文件?

結構

     actor 
          | 
          | 
          v 
        +--------------+   +--------------------------------+ 
        | NPresenter |   | NNamespace     | 
      +-------+|--------------|+------->|--------------------------------| 
      |  |--------------|   |--------------------------------| 
      |  | -display(); |   | +full_qualified_js_name();  | 
      |  +--------------+   | +full_qualified_less_name(); | 
      |         | +full_qualified_layout_name(); | 
      |         +--------------------------------+ 
      v 
+------------------+       (assets) 
| NModel   |       +------------+ 
|------------------|       | js   | 
|------------------|------------------------->| less  | 
| +file_content(); |       | layout  | 
+----------------- +       +------------+ 

fully_qualified _ * _名稱()返回目標文件的輸出,用正則表達式和preg_match_all,我在佈局文件中添加XMLNS象下面這樣:

<?xml version="1.0" encoding="UTF-8"?> 
    <html xmlns:aa='zz' xmlns:ee='rr'> 
    <head> 
     <title></title> 
     <script src="/assets/js/appended_js.js"></script> 
     <LINK rel="stylesheet" type="text/css" href="/assets/js/appended_css.css""> 
    </head> 
    <body> 
     <aa:span id="span1"> 
      <aa:p>aaa</aa:p> 
     </aa:span> 
     <ee:span id="span1"> 
      <ee:p>aaa</ee:p> 
     </ee:span> 
    </body> 
    </html> 

在更短的文件我做如下所示:

/*less*/ 
aa\:span{background: #00ff00;} 

在js文件中我做了類似如下:

/*js*/ 
var Namespace = { 
    methode1: function() { 
     var target = document.getElementsByTagNameNS("aa","zz"); 

     return target.length; 
    } 
}; 
+0

您可能應該添加一個示例演示代碼,以便清楚您實際執行的操作。我不確定是否有一些你所問的小錯誤,所以舉出一些例子說明這一點變得更加清晰。 – hakre

+0

@hakre感謝您的反饋,我只是發佈更多的細節,如果它鋼不明確,請詢問... – kapsula

+0

+1爲單獨編輯,這現在更加清晰。 – hakre

回答

1

在Javacript方面,您可以使用jQuery Xmlns plugin。它允許你使用名字空間感知的CSS選擇器。

var feedTitle = $().xmlns(
    { 
    atom : 'http://www.w3.org/2005/Atom' 
    }, 
    function() { 
    return this.find("atom|channel > atom|title"); 
    } 
).text(); 
$('#feedTitle').text(feedTitle); 

在PHP中,您可以使用Xpath來查詢您的DOM。

$dom = new DOMDocument(); 
$dom->loadXml($file); 
$xpath = new DOMXpath($dom); 
$xpath->registerNamespace('atom', 'http://www.w3.org/2005/Atom'); 

$feedTitle = $xpath->evaluate('string(//atom:channel/atom:title)', NULL, FALSE)); 

要在名稱空間內創建元素,請使用DOMDocument :: createElementNS()。

三個要點:

  1. 如果你定義自己的命名空間,其結果是沒有任何HTML更多。瀏覽器不會識別/呈現元素。
  2. 不要混淆名稱空間前綴和實際名稱空間。命名空間是xmlns:*屬性中的字符串。它應該是一個全球唯一的字符串。 (這就是爲什麼經常使用URL的原因。)名稱空間前綴是名稱空間字符串的簡短別名,但只有當前文檔的當前分支有效時纔會重新定義。
  3. 您總是將自己的前綴定義爲查詢(css選擇器或xpath)的名稱空間映射。這樣你的查詢是明確的。