2012-06-06 5 views
1

У меня есть массив как это:Получить имя тега из атрибута имени

["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"); 

ответ

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.

+0

Эта работа :) Спасибо @creemam Это было очень полезно для меня :) –

+0

Потому что я не знал что 'select, textarea' может быть выбран по значению –

1

Как jQuery 1.6, вы хотите использовать $ xxxxx.prop ("tagName")

+0

Я использую Версию 1.7.2, Можете ли вы добавить пример, потому что я попробовал его, и результат не установлен –

+0

alert ($ ("* [name = 'school_name']"). Prop ("tagName")); - Это отображает «INPUT» для меня. –

1

Вы можете использовать атрибут .nodeName для определения имени тега элемента

+0

Спасибо за помощь, но @creemama Отвечать Меньше кода и очень полезно для меня –

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(); 
2

Если бы я получил то, что вы ищете, то вы необходимо использовать filter

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

+1 Хотя это не отвечает на прямой вопрос о том, как получить имя тега, я считаю, что это может быть лучшим решением для случая использования OP , – Paulpro

+0

Моя форма содержит много входов, текстовых полей и выберите, и я не могу знать, это имя относится к вводу или select или textarea –