2009-11-25 72 views
2

Javascript對象目前我的單元測試下面的代碼:創建由jQuery對象

if ($(selectedElement).innerText == 'blah') 
{ 
    // do something 
} 

與selectedElement是從UI中選擇一個錨對象。

在我的測試代碼中,我創建了一個DOM結構,該結構在合適的位置具有該錨點以供選擇。這裏的問題是因爲s​​electedElement原本是一個JavaScript對象,所以我需要轉換我從DOM結構(這是一個JQuery對象)獲得的錨點,以便達到上述條件。

我曾嘗試以下,沒有成功:

// DOM structure using HtmlDoc 
/*:DOC += <span id='testSpan' class='testSpanClass'><a href='#' id='selectedElem'>blah</a></span> */ 
selectedElement = $('#selectedElem')[0]; 

我的目標是能夠使用常規的JavaScript對象滿足條件,也可以切換回一個jQuery對象以滿足進一步降低功能的條件。但是如果有更好的方法,我會放棄它。

有沒有人有任何想法如何去解決這個問題?

編輯:有沒有不需要更改代碼的解決方案? selectedElement實際上是一個全局變量。

謝謝。

+0

+1爲單元測試代碼:) – 2009-11-25 02:04:51

+2

$(selectedElement).innerText無效代碼.. $(selectedElement)爲對象的包裹組/陣列..的innerText不是一個屬性..使用$( selectedElement).text() – 2009-11-25 03:35:28

回答

4

我不確定你在測試什麼瀏覽器,但innerText是IE瀏覽器唯一的屬性。既然你已經使用jQuery,我建議你只需要調用的.text()方法是這樣選擇的元素:

selectedElement = $('#selectedElem')[0]; // Get DOM element 

if ($(selectedElement).text() == 'blah') 
{ 
    // do something 
} 

你得到的DOM對象的方法是好的:$('#selectedElem ')[0]或$('#selectedElem')。get(0)是等價的,但第一個在大循環中更快。

+0

不幸的是它沒有工作。另外,我會避免改變代碼,因爲selectedElement是一個全局變量,也用於其他地方(在問題中更新)。 – BeraCim 2009-11-25 03:00:32

+0

什麼沒有用? (我更新了我的代碼以反映不改變全局變量)。如果你有一個有效的DOM元素,$(el).text()會返回'innerText'這麼說。 – 2009-11-25 03:21:08

+0

如果我不允許更改'innerText'會怎麼樣? – BeraCim 2009-11-25 03:26:28

2

你可以使用jQuery的.html()嗎?

if ($(selectedElement).html() == 'blah') 
{ 
    // do something 
} 

否則,在不改變代碼:

var selectedElement = $('#selectedElem')[0]; 

if (selectedElement.innerHTML == 'blah') 
{ 
    // do something 
} 
+0

'.html()'不等於'.innerText'。 '.text()'是他們想要的。 – 2009-11-25 02:04:10

+0

經過快速測試以確保它看起來能夠以任何方式工作。但我的理解是.html()適用於html標籤之間的任何內容。 – 2009-11-25 02:32:09

+0

如果我可以更改代碼,是的,這是完美的。如果我不能更改代碼怎麼辦?無論如何寫測試真正進入條件? – BeraCim 2009-11-25 03:03:46

2

jQuery的get方法返回的是jQuery對象原來的DOM元素。 我想也許你需要使用$('#selectedElem').get(0)