Универсальный объект элемента

Обсуждение новых возможности программы, которые в будущем хотелось бы видеть в ней
Ответить
serpee
Сообщения: 21
Зарегистрирован: 30 дек 2009, 12:51

Универсальный объект элемента

Сообщение serpee » 30 дек 2009, 15:57

В хумане организовано большое количество объектов и соответственно методов, но как показывает практика зачастую и этого всего не всегда хватает, чтобы быстро написать нужный скрипт, часто приходится ну уж сильно изгаляться, чтобы получить желаемое. В связи этим есть у меня идея организации универсального объекта элемента.
Под универсальным объектом элемента я понимаю: объект в пхп, который "привязан" к соответствующему элементу (IHTMLElement, IHTMLElement2) в дом структуре. Как вариант привязку можно осуществить по идентификатору, который будет генерироваться в хумане при создании данного объекта. Создавался бы данный объект посредством функций типа:

function connectToElementBy( $tagName, $attrName, $attrValue, $exactly = true, $elementNum = 0 ) {
//.....
}

function connectToElementByWithIniFrame( $tagName, $attrName, $attrValue, $frameNum = 0, $exactly = true, $elementNum = 0 ) {
//.....
}

$elementObj = connectToElementBy( 'INPUT', 'NAME', 'login', true, 0 );
$elementObj = connectToElementByWithIniFrame( 'INPUT', 'NAME', 'login', 0, true, 0 );



Параметры:
$tagName - таг нужного элемента (пр. INPUT),
$attrName - имя атрибута, который должен быть в элементе с заданным тагом (пр. ID)
$attrValue - значение, которое должно быть у элемента атрибута $attrName
$exactly - определяет точное или частичное вхождение значения атрибута $attrValue
$elementNum - номер элемента пп, в случае если по заданным признакам было найдено несколько элементов (идеальный пример инпут типа радиобокс, где так нейм и значения атрибута нейм одинаковы для всей группы радиобоксов)
$frameNum - номер фрейма для поиска элемента

$elementObj - объект класса, который частично содержит основной функционал (IHTMLElement, IHTMLElement2), к примеру:

abstract class Element {

//IHTMLElement
abstract function setAttribute( $attrName, $attrValue );
abstract function getAttribute( $attrName );
abstract function removeAttribute( $attrName )
abstract function click();
abstract function getParentElement(); //возвращает экземпляр класса Element для родителя данного элемента
abstract function getOffsetLeft();
abstract function getOffsetTop();
abstract function getInnerHTML();
abstract function getInnerText();

//IHTMLElement2
abstract function focus();
abstract function blur();
abstract function getScrollLeft();
abstract function getScrollTop();
abstract function setScrollLeft($x);
abstract function setScrollTop($y);
}

Что то конечно мог упустить, но основная идея думаю понятна. Такой функционал мог бы сделать написание программ более гибким.
И в принципе можно использовать только его не прибегая стандартным объектам и не перерывая постоянно хелп.
Ну и на какие то микросекунды будет возрастать быстродействие, т.к. хуман будет хранить указатели на интерфейсы используемых элементов, не повторяя поиск при повторном вызове функции, если потребуется.

Ответить