有没有更好的方法让动态文本出现在组合框旁边?

时间:2010-12-21 15:17:21

标签: extjs

我有一个组合框,根据当前选择,我希望动态文本显示在组合框旁边。
我目前的解决方案有效,但看起来很脆弱。根据组合框在DOM中出现的位置,它可能根本不起作用 以下是我当前解决方案的关键(下拉列表更改时调用):

    var child = owner.el.first().next().first().first().first().next().first();
    if (child.dom.childNodes.length == 3) {
        child.createChild({
            tag: 'span',
            html: c + Ext.id()
        });                      
    } else {
        child.last().replaceWith({
            tag: 'span',
            html: c + Ext.id()
        });
    }

我最关心的是第一行...这不是寻找插入点的好方法。

这是组合框的图片,旁边显示动态文字:

alt text

以下是我查看我想要插入文本的位置:

alt text

有人可以建议更好的方法来实现这种效果吗?感谢。

3 个答案:

答案 0 :(得分:0)

已在页面中显示跨度并按其ID获取。

Ext.get('combo-suffix').insertHTML(theText);

或者,按其id获取组合框元素并获取/添加其兄弟。

答案 1 :(得分:0)

它总是在一个名为“ext-gen82”的div中吗?

如果是这样,为什么不使用jquery find方法?

$("#ext-gen82").find("ext-gen107");

或者你可以给他们自己的课程来帮助你找到它们:

$(".parentClass").find(".spanElement");

你也可以使用children方法:

$("#ext-gen82").children("span");

答案 2 :(得分:0)

@OrangeDog指出了正确的方向,但我会在这里发布更详细的答案,以便完整/未来参考。

var inserted = false; // need to set this up initially
...
var pos = Ext.getCmp('combo-element-id').el.next('.x-form-trigger');
if (inserted) {
    pos.next().update(c + Ext.id());
} else {
    inserted = true;
    pos.insertSibling({
        tag: 'span',
        html: c + Ext.id()
    }, 'after');                            
}