2014-11-15 16 views
11

tôi mong đợi đoạn mã sau để cảnh báo "out"this.nextSibling không làm việc

<input type=text onfocus="alert(this.nextSibling.id)" /> 
<output id="out">this is output</output> 

Nhưng nó cảnh báo không xác định TẠI SAO?

Trả lời

11

nextSibling chọn nút anh chị em tiếp theo của phần tử. Nút tiếp theo cũng có thể là textNode không có thuộc tính id, do đó bạn nhận được giá trị undefined. Vì câu trả lời khác cho thấy bạn có thể sử dụng thuộc tính nextElementSibling đề cập đến nút anh chị em tiếp theo có nodeType của 1 (tức là đối tượng Element) hoặc xóa các ký tự ẩn giữa các phần tử.

Lưu ý rằng IE8 không hỗ trợ thuộc tính nextElementSibling.

+0

nhưng trong tôi mã không có nút giữa phần tử inout và đầu ra và tôi không thấy các ký tự ẩn giấu –

+0

@moroccan_dev Vui lòng kiểm tra fiddle này và mở giao diện điều khiển để xem nút đã đăng nhập. http://jsfiddle.net/khcxjta5/ – undefined

+2

@moroccan_dev ký tự ẩn là thứ mà bạn không thể nhìn thấy vì chúng bị ẩn. Trong trường hợp này, chúng là các ký tự dòng mới. – cychoi

8

Hãy thử điều này:

alert(this.nextElementSibling.id); 

LƯU Ý: Các nextSibling tài sản trả về nút ngay sau khi nút được chỉ định, ở mức cây giống.

nextElementSibling thuộc tính chỉ đọc trả về phần tử ngay sau phần tử được chỉ định trong danh sách con của cha mẹ hoặc null nếu phần tử được chỉ định là phần tử cuối cùng trong danh sách.

+0

nhờ anh chàng tôi đã rất weired về sản lượng không xác định –

-1

Giả sử rằng bạn có thể sử dụng jQuery

Lưu ý rằng this.nextSiblingmight not work in IE specifically

Các jQuery thay thế cho this.nextSibling$(this).next()

+3

Tại sao bạn sẽ đăng câu trả lời jQuery cho một câu hỏi yêu cầu một cách rõ ràng cho một câu trả lời JavaScript và, không nơi nào, cho thấy rằng jQuery đang được sử dụng hoặc là một lựa chọn? Đặc biệt sau 18 tháng (khi tôi viết cái này)? –

+0

@DavidThomas, tôi hoàn toàn đồng ý, tôi biết cũ nhưng tôi ghét khi tôi hỏi câu hỏi về JavaScript và ai đó đề xuất Thư viện đúc sẵn, tôi có nghĩa là làm thế nào chúng ta có thể học JavaScript nếu chúng ta lười biếng và sử dụng các kịch bản đã tạo mọi lúc, chúng ta có thể đề nghị người khác sử dụng jQuery nếu họ không muốn tìm hiểu javascript thực sự. –