近来由于公司准备引入Ext做表现层的一些东西,对于项目中现有的页面与Ext的Form Widget无法兼容,所以产生了使用Ext的Comp替换现有的HTML Element的想法,代码如下,经过简单测试,基本可以满足一般的HTML页面元素无损封装,同时包括了后期对于封装好的Ext Comp使用Ext的一些事件和特效做了准备。

Ext.onReady(function()
{
Ext.BLANK_IMAGE_URL = 'http://www.cnblogs.com/resources/images/default/s.gif';
Ext.QuickTips.init();

/**//**
* button
*/
var objArray = Ext.DomQuery.select("input[type=submit]");

Ext.each(objArray, function(obj)
{

var btn = new Ext.Button(
{
text : obj.value,
applyTo : obj,
handler : obj.onclick,
type : obj.type
});
btn.getEl().replace(Ext.get(obj));
});
var objArray = Ext.DomQuery.select("input[type=reset]");

Ext.each(objArray, function(obj)
{

var btn = new Ext.Button(
{
text : obj.value,
applyTo : obj,
handler : obj.onclick,
type : obj.type
});
btn.getEl().replace(Ext.get(obj));
});
var objArray = Ext.DomQuery.select("input[type=button]");

Ext.each(objArray, function(obj)
{

var btn = new Ext.Button(
{
text : obj.value,
applyTo : obj,
handler : obj.onclick,
type : obj.type
});
btn.getEl().replace(Ext.get(obj));
});

/**//**
* text and textarea and password and file
*/
var objArray = Ext.DomQuery.select("input[type=text]");

Ext.each(objArray, function(obj)
{

var txtField = new Ext.form.TextField(
{
applyTo : obj,
validationEvent : 'blur',

validator : function()
{

Ext.Ajax.request(
{
url : '1.htm',

success : function(response)
{
txtField.clearInvalid();
txtField.markInvalid(response.responseText);
},

failure : function()
{
alert(1);
}
});
},
allowBlank : ((obj.attributes.getNamedItem("notNull") || obj.attributes
.getNamedItem("notnull")) ? false : true),
blankText : '该字段不能为空'
});
});
var objArray = Ext.DomQuery.select("input[type=password]");

Ext.each(objArray, function(obj)
{

var txtField = new Ext.form.TextField(
{
applyTo : obj,
inputType : 'password'
});
});
var objArray = Ext.DomQuery.select("input[type=file]");

Ext.each(objArray, function(obj)
{

});
var objArray = Ext.DomQuery.select("textarea");

Ext.each(objArray, function(obj)
{

var txtArea = new Ext.form.TextArea(
{
applyTo : obj
});
});

/**//**
* checkbox and radio
*/
var objArray = Ext.DomQuery.select("input[type=checkbox]");

Ext.each(objArray, function(obj)
{

var checkbox = new Ext.form.Checkbox(
{
applyTo : obj
});
});
var objArray = Ext.DomQuery.select("input[type=radio]");

Ext.each(objArray, function(obj)
{

var radio = new Ext.form.Radio(
{
applyTo : obj
});
});

/**//**
* select or comboBox
*/
var objArray = Ext.DomQuery.select("select");

Ext.each(objArray, function(obj)
{

var btn = new Ext.form.ComboBox(
{
typeAhead : true,
triggerAction : 'all',
transform : obj,
forceSelection : true
});
});

})
原型页面
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>test</title>
<link rel="stylesheet" type="text/css"
href="resources/css/ext-all.css" />
<script type="text/javascript" src="adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="ext-all-debug.js"></script>
<script type="text/javascript" src="example-form.js"></script>
</head>
<body>
<form>
<input type="submit" value="asdqweqwe" onclick="alert(2)">
<input type="text" notnull>
<input type="text">
<input type="password">
<input type="file">
<textarea></textarea>
<input type="checkbox">
<input type="radio" name="q">qweqwe</input>
<input type="radio" name="q">qweqwe</input>
<select name="s">
<option value="kkkkk">
pp
</option>
<option value="gg">
ww
</option>
</select>
</form>
</body>
</html>