使用getElementsByTagName文本更改<textarea>的样式从中心对齐</textarea>

时间:2011-09-10 00:44:26

标签: javascript textarea var getelementsbytagname text-align

我有一个脚本可以更改textarea的文本对齐方式,其ID为textbox1

 // <![CDATA[
 function alignFix() {

 document.getElementById("textbox1").style.textAlign="left";

 }
 // ]]>

这是标记:

 <textarea cols="36" rows="25" readonly="readonly" id="textbox1" name="textbox" style="text-align: center;">dynamic text populates via another script unrelated to problem</textarea>

这是触发器:

 <select class="c9" onchange="showCenterTemplates(this); alignFix();">

它运作得很好。现在我有一个以上的textarea我需要这个脚本来工作,所以我认为这将是一个简单的从document.getElementById切换到document.getElementsByTagName但是我的无知/惊讶,这不是很好

我搜索了问题和论坛以及Google,并找到了document.getElementsByTagName的实例,但不是我需要的方式。

似乎在使用getElementsByTagName时,必须始终声明一个变量(任何人都可以确认这是否为真?)所以我试过了:

 // <![CDATA[
 function alignFix() {

 var textbox = document.getElementsByTagName('textarea');
 style_textbox = textbox.style;
 style_textbox.textAlign="left";
 }
 // ]]>

但是在测试时我遇到了style_textbox is null or not an object错误。有人可以帮帮我吗?非常感谢提前。

P.S。脚本的原因是因为textareas的原始内容需要居中,但是当用户开始从<select>中选择模板以使用<textarea>showCenterTemplates()中动态填充时脚本,这些模板需要在<textarea>内留下对齐的文本。希望这是有道理的。

1 个答案:

答案 0 :(得分:6)

getElementsByTagName返回一个元素数组,因此你必须遍历它:

var i,j, textbox = document.getElementsByTagName('textarea');
for (i=0, j=textbox.length; i<j; i++) {
    textbox[i].style.textAlign='left';
}

编辑:评论中的每个请求,一个简短的解释:

  • i从0(零)增加,只要它没有达到数组的大小
  • textbox是数组,textbox.lenght返回其大小
  • 对于每个i(如在i中为0,我是1等)textbox [i]表示数组中的位置
  • 由于数组中填充了HTML元素,因此数组中的每个位置都是一个元素, 并具有样式属性