我发现jQuery难以学习,因为似乎有很多方法可以编写同样的东西。
作为练习,我想在锚标签中取出文本并将其填入链接href属性。
例如
<a href="">http://www.something.com</a>
成为
<a href="http://www.something.com">http://www.something.com</a>
我的第一次尝试是
<script type="text/javascript">
$(document).ready(function() {
var text = $('a').text();
$('a').attr( 'href', text );
});
</script>
显然无法正常工作,因为我需要指定为每个链接执行此操作。
我应该使用foreach循环吗?一个.each()函数?或$这种表示法? 他们都会工作吗?
答案 0 :(得分:7)
$('a').text()
会返回每个锚节点文本值的组合..我刚刚在stackoverflow上做了它,它给了我:
“mederlogoutaboutfaqQuestionsTagsUsersBadgesUnansweredAsk QuestionJquery $ this或each()to 在a处指定一个链接 timejqueryeachthiseditcloseflagchrisadd commentjqueryeachthisask你自己的 questionjquerythiseachC ++ / Unix的 海滨国际的程序员 Ltdjobs.stackoverflow.comquestion feedaboutfaqblogpodcastprivacy policyadvertising infocontact usfeedback总是 welcomestackoverflow.comserverfault.comsuperuser.commetahowtogeek.comdoctype.comcc-wikiattribution 必需的“
因此你应该使用jQuery.prototype.each,这样你就可以保存对每个锚点文本的引用:
$('a').each(function() {
var text = $(this).text();
$(this).attr('href', text );
});
额外的好处是每个函数都在它自己的执行上下文中运行,你定义的每个变量,声明的每个'text'对于那个函数体是唯一的,所以在一个内部有一个 lot 更多的控件。每个
关于vanilla循环处理 - 我会使用jQuery.prototype.each,因为它是一个更高级别的函数,你必须将一个变量赋值给nodeList的长度并从0开始,停在长度(或者如果顺序没关系,那么做一个反向的循环)..这只会导致更多的工作而不是必要的。