JQuery: установить заголовок метки в "для"-атрибут его
Это мой код:
$(document).ready(function(){
$("label").attr({
title: getTitle($(this).attr('for')),
className: "something"
});
function getTitle(val) {
return "blubb "+val;
}
});
Функция getTitle(val) возвращает мне "blubb undefined" вместо "blubb contact_properties_list_18". В чем может быть проблема?
<label class="something" for="contact_properties_list_18" title="blubb undefined">Sonstige</label>
1 ответ
this
где вы используете это не относится к метке. JQuery не говорит, что this
будет в пределах ready
обработчик.
Вы можете использовать версию attr
который принимает функцию:
$("label").attr("title", function() {
this.className = "something";
return getTitleFor(this.htmlFor);
});
$("label").attr("title", function() {
this.className = "something";
return this.htmlFor;
});
.something {
color: green;
}
<label for="foo">foo</label>
<label for="bar">bar</label>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
... но так как вы делаете две вещи, я бы, вероятно, использовал each
:
$("label").each(function() {
this.title = getTitleFor(this.htmlFor);
this.className = "something";
});
$("label").each(function() {
this.title = this.htmlFor;
this.className = "something";
});
.something {
color: green;
}
<label for="foo">foo</label>
<label for="bar">bar</label>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
Обратите внимание, что я использовал htmlFor
просто чтобы избежать ненужного создания экземпляра jQuery. htmlFor
отражает for
свойство (с универсальной поддержкой браузера). Точно так же title
свойство элемента DOM отражает title
атрибут, так что присвоение этому также работает.