2012-11-13 74 views
1

我正在創建一個非常基本的tic tac腳本的javascript版本。我已經使用一張桌子並適當地分配邊框來設置棋盤。JavaScript函數查看任何文本是否在HTML元素中

當玩家走棋的X被放置在盒中,並且當計算機進入一個O.

但是我的問題是試圖決定,如果細胞已經「拿來主義」,這意味着已經存在內有X或O.

在JavaScript中是否有一個函數可以檢查HTML元素中的內容,或者任何人都可以想到另一種方法來做到這一點?我考慮使用9的數組,保持x或o並檢查這種方式,但我遇到了如何將單元號傳遞給該函數以更新數組的問題。

我是JavaScript新手,如果存在這些可能性中的任何一種,請告訴我,或者您有任何建議!

+0

你是否使用任何JavaScript框架,如jQuery? – djdy

+0

兩者都有可能,你有偏好嗎? – mrtsherman

+0

@mrtsherman,你認爲這會更快。我知道它的簡單檢查和(我相信)不應該花費太多時間,但通過多次檢查元素,我覺得它可能比數組花費更長的時間,並且只檢查其中的值。 Thoguhts? – ZAX

回答

2

使用textContentinnerText來獲取元素的文本。

實施例:

<!doctype html> 
<html> 
    <head> 
     <title>test</title> 
    </head> 
    <body> 
     <p id="hello-container">Hello, World!</p> 
     <script type="text/javascript"> 
      var el = document.getElementById('hello-container'); 
      var text = el.textContent || el.innerText || ''; 
      alert('The text is: ' + text); 
     </script> 
    </body> 
</html> 

說明:

由於IE8-使用innerText和Firefox使用textContent(與其他瀏覽器中選擇任一側或兩者),則需要檢查這兩種性質。我們利用JavaScript的邏輯或運算符||來檢查一行中的兩個屬性。如果存在textContent屬性,則text = el.textContent || el.innerText將在text中存儲el.textContent。如果沒有textContent屬性(或者textContent是空字符串或只是空格),那麼它將嘗試將innerText存儲在text變量中。最後,如果textContentinnerText都不能被找到,我們使用|| ''將其設置爲空字符串*

*這僅僅是必要的,如果textContent是空字符串/空格和innerText不存在,在這種情況下,雙方將falsey。我們不是讓textundefined,而是存儲空字符串''


如果您想檢查,看看是否是HTML中的一個元素,而不是文本(如果您正在使用你的X和O圖像元素,這將是有益的),你可以使用innerHTML。這是所有瀏覽器的標準!

+0

有沒有可能做這樣的事情:'if(!(e1.textContent || e1.innertext))'檢查是否已經有東西在那裏? – ZAX

+1

當然可以!這將完美運作。注意,不過'innerText'必須有一個大寫字母T. –

2

最好的辦法是使用二維數組:

  var tictactoe = [["","",""],["","",""],["","",""]] 

然後用

  if(tictactoe[row][col] == "") 
       tictactoe[row][col] = "X" //(or "O", you decide) 

,並使用一個單獨的函數繪製

+3

不需要用空字符串初始化數組,所以'if(!tictactoe [row] [col])''。 :-) – RobG

1

大衛類似...

我使用數組構建了一個tic tac toe遊戲來保存這些動作,然後將顯示基礎d(將遊戲邏輯從顯示中分離出來)。這樣你就不會在乎細胞裏的東西。

無論如何,你可以這樣做:

if (element.textContent || element.innerText) { 
    // there is some text content 
} 

然而,也有可能是導致誤報的元素空白。或者X和O可能是一個圖像元素,無論如何。

0

我想既然tic-tac-toe很簡單,那麼你可以使用一個單一的數組。

var board = new Array(9); 

//Board layout: 
// [0][1][2] 
// [3][4][5] 
// [6][7][8] 

//Win if any of these combinations are present 
//012, 036, 048, 147, 246, 258, 345, 678 

然後剛剛經歷board循環,弄清楚它是否有XO的值,並做一些簡單的檢查,看看他們是否在一排有3個。

var x = [], o = []; 
var winner = 'Game in Progress'; 
for(var i in board){ 
    if(board.hasOwnProperty(i)){ 
     if(board[i] == 'X') 
     x[i] = true; 
     else if(board[i] == 'O') 
     o[i] = true; 
     if(i == 8) winner = 'Cat Game'; 
    } 
} 

if((x[0] && x[1] && x[2]) || (x[0] && x[3] && x[6]) || 
    (x[0] && x[4] && x[8]) || (x[1] && x[4] && x[7]) || 
    (x[2] && x[4] && x[6]) || (x[2] && x[5] && x[8]) || 
    (x[3] && x[4] && x[5]) || (x[6] && x[7] && x[8])){ 
    winner = 'X is the Winner'; 
} 

if(winner != 'X is the Winner') 
if((o[0] && o[1] && o[2]) || (o[0] && o[3] && o[6]) || 
    (o[0] && o[4] && o[8]) || (o[1] && o[4] && o[7]) || 
    (o[2] && o[4] && o[6]) || (o[2] && o[5] && o[8]) || 
    (o[3] && o[4] && o[5]) || (o[6] && o[7] && o[8])){ 
    winner = 'O is the Winner'; 
} 

我寫了some of the code,你需要做一個井字棋遊戲,所以你可以更好地理解。剩下的東西就是展示是誰轉身,當玩家點擊一個盒子時(輪到他們),他們的符號被添加到該盒子(如果它是空的),並重置遊戲。祝你好運。 :)

相關問題