[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Fatal Error: Not found error
McLotos
Всем привет.
Странный глюк. Есть цикл
for($i=1;$i<count($this -> vars[$elem -> getAttribute('id')]);$i++){
$this -> dom -> insertBefore($elem -> cloneNode(TRUE),$elem -> nextSibling);}

Ругается что Uncaught exception 'DOMException' with message 'Not Found Error'
Stack trace:
#0 template.class.php(308): DOMNode->insertBefore(Object(DOMElement), Object(DOMText))
#1 template.class.php(291): Template->checkAndCopy(Object(DOMElement))
#2 template.class.php(182): Template->prepareBody()
#3 footer.php(57): Template->show()
#4 index.php(6): require('/...')
#5 {main}
thrown in template.class.php on line 308


_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
kaww
Если верить мануалу, то
Цитата
refnode не является дочерним узлом данного узла.
McLotos
kaww
Но это странно. Потому-что $elem -> nextSibling возвращает следующий за текущим элемент.
Вариант
$this -> dom -> appendChild($elem -> cloneNode(TRUE));

Срабатывает идеально, но мне так не нужно, потому-что он добавляет в конец.

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
kaww
а так?
for($i=1, $count = count($this->vars[$elem->getAttribute('id')]); $i < $count; ++$i){

$sibling = $elem->nextSibling;
$sibling->parentNode->insertBefore($elem->cloneNode(TRUE), $sibling);
}
McLotos
Пробовал. та же история

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
McLotos
Сделал даже так
 $next = $elem -> nextSibling -> nodeValue == "\r\n"
? $elem -> nextSibling -> nextSibling
: ($elem -> nextSibling -> nodeType == 3
? $elem -> nextSibling -> nextSibling
: $elem -> nextSibling);
for($i=1;$i<count($this -> vars[$elem -> getAttribute('id')]);$i++)
{ $sibl = $elem -> nextSibling -> nextSibling;
$this -> dom -> insertBefore($elem -> cloneNode(TRUE),$next);
}

Картина та же.

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
kaww
McLotos, не поленился и проверил ). Вариант, предложенный мной, работает:
$htmlString = <<< HTML
<h2>Foo</h2>
<
p>Some Foo</p>
<
h2>Bar</h2>
<
p>Some Bar </p>
<
h2>Baz</h2>
<
p>Some Baz</p>
HTML;

libxml_use_internal_errors(true);
$DOM = new DOMDocument();
$DOM->loadHTML($htmlString);
$DOM->preserveWhiteSpace = false;

$elem = $DOM->getElementsByTagName('h2')->item(0);
for ($i = 0; $i < 3; ++$i) {
$sibling = $elem->nextSibling;
$sibling->parentNode->insertBefore($elem->cloneNode(true), $sibling);
}
$DOM->formatOutput = true;
echo $DOM->saveHTML();
McLotos
$sibling = $elem->nextSibling; это следующий после $elem
$sibling->parentNode == $elem->parentNode по логике.
Может тоже попробовать. Сейчас проверю =)

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
McLotos
laugh.gif
Maximum execution time of 31 seconds exceeded

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
McLotos
Вроде простейшая функция, а столько времени на нее уходит =(
Вот весь код
private function prepareAndCopy(){
if($elem -> nodeType !== 3){
if(($elem -> hasAttribute('id')) && (array_key_exists($elem -> getAttribute('id'), $this -> vars))){
$next = $elem -> nextSibling -> nodeValue == "\r\n"
? $elem -> nextSibling -> nextSibling
: ($elem -> nextSibling -> nodeType == 3
? $elem -> nextSibling -> nextSibling
: $elem -> nextSibling);
for($i=1;$i<count($this -> vars[$elem -> getAttribute('id')]);$i++){
$elem -> parentNode -> insertBefore($elem -> cloneNode(TRUE),$next);}}

for($i=0;$i<$elem -> childNodes -> length;$i++){
$this -> prepareAndCopy($elem -> childNodes -> item($i));}
}


_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.