2013-06-21 4 views
3

Извините мой английский первый ... :)Управление пространств имен из нескольких HTML-фрагментов

Я использую XMLNS для HTML тегов и нацелить их в JS с getElementsByTagNameNS и использовать CSS селектор xmlns\:tagName для CSS документов, на стороне сервера я используйте DOM с объектом PHPDOMDocument::getElementsByTagNameNS ...

Я хочу знать, хорошо ли я сделал или был ли эффективный способ? эта логика может вызвать у меня проблему в будущем? Я не знаю, как ex: DRUPAL или JOOMLA управлять вещью?

Или вы думаете, что я могу использовать regexp в 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 спасибо за реакцию, i'v просто опубликуйте более подробную информацию, если она станет непонятной, пожалуйста, спросите ... – 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). Таким образом, ваши запросы недвусмысленны.