2012-07-20 40 views
6

Tôi đang cố sử dụng toán tử bậc ba để kiểm tra xem giá trị của phần tử XML có phải là null hay không. Nếu đó là sau đó tôi muốn biến là một điều. Nếu không thì tôi muốn nó trả về giá trị của phần tử. Đây là những gì tôi có cho đến nay.Sử dụng toán tử bậc ba để đặt biến số

var rating = data.getElementsByTagName("overall_average")[0].childeNodes[0].length > 0 ? data.getElementsByTagName("overall_average")[0].childeNodes[0].nodeValue : "It is empty"; 

Trả lời

5

Con đường ngắn nhất:

var rating = (data.getElementsByTagName('overall_average')[0].childNodes[0] || {}).nodeValue || 'It is empty'; 
+0

Vui lòng giải thích? – mplungjan

+0

@mplungjan, tôi sử dụng toán tử '||' để kiểm tra null trong ví dụ của tôi. Vì vậy, nếu bạn có một cái gì đó như thế này: 'var x = null || {}; 'thì x sẽ là một' đối tượng rỗng 'thay vì 'null'. Bạn cũng có thể sử dụng '||' cho các thuộc tính: 'var x = {} .someProp || 'hello'; ', x sẽ là '' hello''. –

+0

Cảm ơn! Bạn sẽ có thể giải thích làm thế nào tôi sau đó sẽ kiểm tra xem cùng một biến này là một số trong một toán tử bậc ba? –

11

đây:

var node = data.getElementsByTagName('overall_average')[0].childNodes[0]; 
var rating = node ? node.nodeValue : 'It is empty'; 

Lưu ý rằng mã này ném (lỗi) trong trường hợp không có một yếu tố "overall_average" duy nhất trong data, vì vậy bạn có thể muốn bảo vệ chống lại trường hợp đó nếu cần thiết ...

+0

Nó tiếp tục ném NaN như giá trị của đánh giá. –

+0

Tôi không thấy lý do tại sao nó sẽ làm điều đó. Chúng tôi chỉ đơn thuần là tham chiếu một nút và truy cập nút 'nodeValue' của nó. Tôi khuyên bạn nên thiết lập một điểm ngắt và kiểm tra nếu 'nút' thực sự là một tham chiếu Node ... –

+0

Cảm ơn. Tôi đã làm điều đó. Đã có một plugin cố gắng làm tròn biến xếp hạng. Đã chuyển mã hóa của tôi thành một hàm ẩn danh và điều đó đã thực hiện thủ thuật. Để tham khảo trong tương lai, mặc dù, bạn có biết làm thế nào để kiểm tra xem một biến là một số và nhổ ra một cái gì đó dựa trên kết quả? Tôi một lần nữa sẽ thích nó ở trong một nhà điều hành bậc ba. –

1

Hoạt động ba năm của bạn có vẻ ổn với tôi. Một điều tôi sẽ đề nghị (cho dễ đọc và ngắn gọn) là để xác định đối tượng overall_average của bạn như là một biến và tham khảo nó sau.

var overall_average = data.getElementsByTagName("overall_average")[0].childeNodes[0]; 
var rating = overall_average.length > 0 ? overall_average.nodeValue : "It is empty"; 

Chúc may mắn!

+0

Cảm ơn. Điều này có ý nghĩa, nhưng ý nghĩa tôi đang chạy qua một danh sách các yếu tố này sẽ là hai dòng cho mỗi biến Tôi đang cố gắng để thiết lập. –

Các vấn đề liên quan