2012-06-25 142 views
3

我正在嘗試創建一個循環(或使用.each)來更改許多DOM元素的style:display屬性。我最初的想法是使用getElementsByName選擇所有我叫​​的元素:使用更改多個元素的樣式

var TextElements = document.getElementsByName("ptext1"); 

<p id="ptext0"name="ptext">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p> 
<p id="ptext1"name="ptext1">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p> 
<p id="ptext2"name="ptext1">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p> 
<p id="ptext3"name="ptext1">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p> 
<p id="ptext4"name="ptext1">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p> 
<p id="ptext5"name="ptext1">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p> 
<p id="ptext6"name="ptext1">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p> 

爲了讓所有的元素與名稱的對象/數組​​

但我無法正常工作,所以我搬到了.each

兩個

$.each(TextElements, function (index) { 
    this.style.display="none"; 
}); 

$('td[name=ptext1]').each(function (index) { 
    this.style.display="block"; 
}); 

似乎沒有正常工作(我已經是否運行使用警報測試)。

現在,如果任何人都可以看到我的錯誤在哪裏,或者建議一個更好的方法,我全都是耳朵。這應該是一個簡單的操作,但由於某種原因,每次嘗試時都會失敗。

編輯: $('p[name=ptext1]').hide()$('p[name=ptext1]').show() ,不同的是.hide()也隱藏我想隱藏的那些上面的行工作,

<p id="ptext0"name="ptext">Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
     </p> 

每一行都有不同的ID標籤,但我想使用名稱標籤來跟蹤哪些我想隱藏,但應該保留的行(name =「ptext」)也被隱藏。

+0

可能被複制/粘貼錯誤,但你'name'屬性之前沒有空間,這一定會按屬性(除了事實影響選擇的工作'name'沒有嚴格有效的對'p'元件)。 – Jamiec

回答

8

你爲什麼不乾脆用:

$('p[name="ptext1"]').css('display', 'none');// you can use block... 

如果你想保留出的線,排除與.not()該行:

$('p[name="ptext1"]').not('#ptext3').css('display', 'none');// you can use block... 

http://jsfiddle.net/4JCvt/

如果您只是想要使用香草JavaScript,你可以這樣做:

var TextElements = document.getElementsByName("ptext1"); 

for (var i = 0, max = TextElements.length; i < max; i++) { 
    TextElements[i].style.display = "none"; 
} 

http://jsfiddle.net/4JCvt/2/

+0

應該有周圍的名稱 - '$( 'TD [NAME = 「ptext1」]')',並在OP元素是'p'不'td' – Jamiec

+0

@Jamiec不neccessarly,它應該反正工作:) –

+1

報價也許確實大部分工作,但閱讀文檔(http://api.jquery.com/attribute-equals-selector/) - 名言:「屬性選擇requre屬性值左右引號」 – Jamiec

0

這將工作

jQuery("*[name$='ptext1']").css('display', 'block'); 

jQuery("*[name$='ptext1']").css('display', 'none'); 
0

這很容易,並與IE8的作品。只要把你的所有<p>元素<div>命名爲 「myDiv」

function myFunction() { 
    var x = document.getElementById("myDIV"); 
    var y = x.getElementsByTagName("P"); 
    var i; 
    for (i = 0; i < y.length; i++) { 
     y[i].style.display="none"; } 
} 
  • 如果你想改變這一切( 「*」)元素在你的<div>,使用:

    var y = x.getElementsByTagName("*"); 
    
  • 如果您想在您的<div>中更換第二個<P>元素,請使用:

    x.getElementsByTagName("p")[1].style.backgroundColor = "red"; 
    

它類似於一個數組。