1.先判断该元素是否存在隐藏元素
判断方法: (一般来说文本都在text标签里边)
a 递归该元素的所有子元素element::children_count();
b 判断该子元素类型element::get_element_type(),根据类型大概可以判断出每个子元素的作用,从而确定从哪个元素拿到当前文本.
2.相关取值API
element:: text();
element::set_text();
element::get_value();
element::set_value();
3.举例说明
无隐藏元素的input标签: 可以直接使用前两个函数(里边其实有个text标签)
select元素:一看到长那样子就知道有好几个元素嘞,OK看看TA的子元素先: 一个是caption,顾名思义是显示当前文本(但不代表当前选中的item文本);第二个是button,很
显然是右边那个小按钮;的三个是popup,也就是下拉框.popup还有子元素option,option就是下拉框弹出来的东西咯(tem);在API操作select的时候要要记得设置option状 态的同时更新caption;
后边那俩个API是操作texteara, plaintext, richtext... 具体拉个例子试试就OK了.当然还有其他获取的方法,在SDK例子中都有陈列.
4.select元素简单代码
class CUDSelectCtrl: public CUDObject//CUDObject简单基类
{
public:
BOOL IsValid();
int GetItemCount(); //获取节点数目
std::string GetItemText(int index); //得到节点文字
std::string GetText();
void SetText(const char *text);
element AddItem(const char* text); //添加节点
element GetCheckedItem(); //得到被选中Item
string GetCheckedItemID(); //得到被选中Item的ID
BOOL DeleteItem(int index); //删除节点
void DeleteAll();
std::vector<int> GetSelectedItem(); //得到被选中的节点索引
void GetAllItem(std::vector<std::string>&ar);
void AddItem(const std::vector<std::string>&ar);
void SetCur(int index=0);
CUDSelectCtrl();
CUDSelectCtrl(const element &ele_select);
CUDSelectCtrl(const HELEMENT he);
CUDSelectCtrl& operator=(const HELEMENT he);
CUDSelectCtrl& operator=(const element& ele_tree);
static CUDSelectCtrl Target_select(const HELEMENT target);
static CUDSelectCtrl Target_select(const element target);
};
CUDSelectCtrl::CUDSelectCtrl()
{
}
CUDSelectCtrl::CUDSelectCtrl(const element &ele_select)
{
m_element = ele_select;
}
CUDSelectCtrl::CUDSelectCtrl(const HELEMENT he)
{
m_element = he;
}
CUDSelectCtrl& CUDSelectCtrl::operator=(const HELEMENT he)
{
m_element = he;
return *this;
}
CUDSelectCtrl& CUDSelectCtrl::operator=(const element& ele_tree)
{
m_element = ele_tree;
return *this;
}
CUDSelectCtrl CUDSelectCtrl::Target_select(const HELEMENT target)
{
element ele(target);
return Target_select(ele);
}
CUDSelectCtrl CUDSelectCtrl::Target_select(const element target)
{
if (!target.is_valid())
return 0;
const char* td = target.get_element_type();
if (strcmp(td, "select")==0)
{
return target;
}
return Target_select(target.parent());
}
int CUDSelectCtrl::GetItemCount()
{
element poup = m_element.child(2);
return poup.children_count();
}
std::string CUDSelectCtrl::GetItemText( int index )
{
std::string st;
if (GetItemCount()>index)
{
element poup = m_element.child(2);
element ele = poup.child(index);
json::string js = ele.text();
const wchar_t* cw = js.c_str();
if(cw != NULL)
st = w2t(cw);
}
return st;
}
element CUDSelectCtrl::AddItem( const char* text)
{
element ele = element::create("option");
ele.set_text(t2w(text));
if(!m_element.is_valid())
return NULL;
element poup = m_element.child(2);
if(!poup.is_valid())
return NULL;
poup.append(ele);
element(m_element.child(0)).set_state(STATE_CHECKED);
return ele;
}
void CUDSelectCtrl::AddItem( const std::vector<std::string>&ar)
{
int num = ar.size();
for (int i=0; i<num; i++)
{
AddItem(ar[i].c_str());
}
if (num>0)
{
SetCur(0);
}
}
BOOL CUDSelectCtrl::DeleteItem( int index )
{
if(GetItemCount()<=index)
return FALSE;
element poup = m_element.child(2);
element ele = poup.child(index);
ele.destroy();
return TRUE;
}
std::vector<int> CUDSelectCtrl::GetSelectedItem()
{
std::vector<dom::element> all;
m_element.find_all(all, "option","checked");
std::vector<int> index;
for(int i=0; i<all.size(); i++)
{
index.push_back(all[i].index());
}
return index;
}
void CUDSelectCtrl::DeleteAll()
{
if(!m_element.is_valid())
return;
element poup = m_element.child(2);
if(!poup.is_valid())
return;
poup.clear();
element caption = m_element.child(0);
if(!caption.is_valid())
return;
caption.set_text(L"");
}
std::string CUDSelectCtrl::GetText()
{
std::string text;
element caption = m_element.find_first("caption");
if(!caption.is_valid())
return text;
json::string js = caption.text();
const wchar_t* cw = js.c_str();
if (cw!=NULL)
{
text = w2t(cw);
}
return text;
}
void CUDSelectCtrl::SetText( const char *text )
{
element caption = m_element.find_first("caption");
if (caption.is_valid())
{
caption.set_text(t2w(text));
}
}
void CUDSelectCtrl::GetAllItem( std::vector<std::string>&ar )
{
int num = GetItemCount();
for (int i=0; i<num; i++)
{
ar.push_back(GetItemText(i));
}
}
void CUDSelectCtrl::SetCur( int index/*=0*/ )
{
std::string text = GetItemText(index);
if (text.empty())
return;
element caption = m_element.child(0);
caption.set_text(t2w(text.c_str()));
element poup = m_element.child(2);
element(poup.child(index)).set_state(STATE_CHECKED);
}
htmlayout::dom::element CUDSelectCtrl::GetCheckedItem()
{
element poup = m_element.child(2);
return poup.find_first("option:checked");
}
std::string CUDSelectCtrl::GetCheckedItemID()
{
CUDObject item = GetCheckedItem();
return item.GetAttribute("id");
}