从其属性名称中获取标记名称

时间:2012-06-06 23:38:49

标签: javascript jquery forms

我有一个这样的数组:

["school_name":"My School Name", "school_number":"54546", "note":"", "class":1]

和这样的HTML:

<input type="text" name="school_name" />
<input type="text" name="school_number" />
<textarea name="note" ></textarea>
<select name="class">
    <option value="1"> One </option>
    <option value="2"> Two </option>
    <option value="3"> Three </option>
</select>

我想从其属性名称中获取标记的名称:

$('*[name=school_name]').attr("tag"); // this is input
$('*[name=class]').attr("tag"); // this is select
$('*[name=note]').attr("tag"); // this is textarea

注意我试过这个:

$('*[name=school_name]').attr("tag");
$('*[name=school_name]').prop("tag");
$('*[name=school_name]').get(0).tagName;
$('*[name=school_name]')[0].tagName;

这就是我想要做的事情:

如果标签名称是输入文本,

$("input[name=school_name]").attr("value", "My School Name");

如果标签名称是选择框,

$("select[name=class]").children("option[value=2]").attr("selected", "selected");

5 个答案:

答案 0 :(得分:2)

如果我得到你想要的东西,你需要使用filter

$('[name=school_number]').filter("input");
$('[name=class]').filter("select");
$('[name=note]').filter("textarea");

答案 1 :(得分:2)

var schoolProperties = {
    "school_name": "My School Name",
    "school_number": "54546",
    "note": "",
    "class": 1
};
for (var property in schoolProperties) {
    $('*[name=' + property + ']').attr('value', schoolProperties[property]);
}

这在fiddle中得到了证明。

答案 2 :(得分:1)

从jQuery 1.6开始,你想使用$ xxxxx.prop(“tagName”)

答案 3 :(得分:1)

您可以使用属性.nodeName来确定元素的标记名称

答案 4 :(得分:1)

你有正确的方法来做到这一点。 Both of these work:

$('*[name=school_name]').get(0).tagName;
$('*[name=school_name]')[0].tagName;

您也可以删除*,并且可能希望先将tagName转换为小写,或者至少是一致的情况:

var $el = $('[name=school_name]');
var tagName;
if($el.length)
    tagName = $el[0].tagName

if(tagName)
    tagName = tagName.toLowerCase();