2010-01-26 2 views
3

Я попытался реализовать функцию children в ExtJS, используя select ("~ *"), он просто не работал.Экстенсиональный эквивалент детей JQuery?

Я просто хочу, чтобы ExtJS возвращал мне набор непосредственного дочернего узла и игнорировал все узлы под дочерними узлами.

<div> 
    <span> 
     <img/> 
     <img/> 
    </span> 
    <span> 
     <img/> 
     <img/> 
    </span> 
    <span> 
     <img/> 
     <img/> 
    </span> 
</div> 

На самом деле я просто хочу, чтобы число непосредственных детей. Если я получу право выбора, я могу сделать getCount() в CompositeElement.

Любая помощь будет очень оценена.

Cheers, Микки

ответ

6

Если вы можете идентификатор родительского, то вы могли бы сделать что-то вроде этого, чтобы получить детей:

<div id='mydiv'> 
    <span> 
     <img/> 
     <img/> 
    </span> 
    <span> 
     <img/> 
     <img/> 
    </span> 
    <span> 
     <img/> 
     <img/> 
    </span> 
</div> 

Определите такую ​​функцию:

function getChildren(parentId) { 
     var kids = Ext.get(parentId).select('*'); 
     kids = kids.filter(function(el) { 
      return el.parent().id == parentId 
     }); 
     return kids; 
    }  

В вашем примере, getChildren('mydiv').getCount() вернется 3.

+0

эй, ты потрясающий :) Я знаю, что это может быть слишком много, чтобы спросить, но я надеюсь, что ты сможешь ответить на него. Я до сих пор не могу понять, как мы можем выбрать элемент класса в ExtJS, например JQuery, легко с помощью $ (". Myclass"). Ext.get() предназначен только для id. Еще раз спасибо :) –

+0

Попробуйте 'Ext.query ('. MyClass') [0];' выбрать ваш элемент DOM классом –

+0

Отлично! Спасибо за подсказку. – igor

0

Может быть, вы могли бы обеспечить представление требуемых элементов DOM, которые будут выбраны, однако, если я правильно понимаю ваш вопрос, я думаю, что вы хотите использовать Ext.Element.

От Ext.CompositeElement, Вы можете получить доступ ко всем методам из Ext.Element. Используя Ext.Element.select, Ext.Element.parent, Ext.Element.query, Ext.Element.next и т. Д., Вы должны иметь доступ к любому элементу, который вы хотите.

См: http://www.extjs.com/deploy/dev/docs/source/Element.fx.html#cls-Ext.Element

Servus,

-bn

1

Я пытался реализации функции детей в ExtJS с помощью выбора ("~ *"), это просто не работало хорошо.

Я верю, что вы ищете "> *". В ExtJS вы можете сделать:

var children = Ext.get("myDiv").query("> *"); 

с

<div id='mydiv'> 
    <span> 
     <img/> 
     <img/> 
    </span> 
    <span> 
     <img/> 
     <img/> 
    </span> 
    <span> 
     <img/> 
     <img/> 
    </span> 
</div> 

вариабельных дети теперь будут массив прямых потомков HTMLElements (в данном случае 3 пролетов).

0

Если вы просто хотите, чтобы получить число детей, вы можете просто использовать

Ext.select('div span').getCount(); 

Он возвращает 3 в вашем примере.

Смежные вопросы