Tôi đã tạo một sự kiện jquery tùy chỉnh được gọi là 'tải' trong ứng dụng của tôi. Tôi muốn nối thêm một phần tử mặt nạ với một spinner, khi sự kiện này được kích hoạt. Tôi có thể tìm ra phần đó mà không có vấn đề gì. Tuy nhiên, một số yếu tố (hình ảnh, đầu vào biểu mẫu, v.v.) không thể nối thêm các phần tử con. Tôi cần để có thể phát hiện nếu mục tiêu của sự kiện này có thể nhận các phần tử con. Nếu nó không thể, sau đó tôi sẽ thêm mặt nạ spinner & vào phần tử cha của nó.Làm cách nào để bạn phát hiện xem phần tử html có thể nối thêm các nút con không?
Trả lời
Bạn phải kiểm tra tên:
/*global $, jQuery */
function isVoid(el) {
var tags = ['area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input',
'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr'],
i = 0,
l,
name;
if (el instanceof jQuery) {
el = el[0];
}
name = el.nodeName.toLowerCase();
for (i = 0, l = tags.length; i < l; i += 1) {
if (tags[i] === name) {
return true;
}
}
return false;
}
Và sử dụng nó như thế này:
var el = document.getElementById('el'),
elj = $('#el');
if (!isVoid(el)) {
// append
}
Bạn có thể thêm phần tử con, chúng sẽ không hiển thị. Điều này nghe có vẻ giống như một sự khác biệt ngữ nghĩa, nhưng điều đó rất quan trọng đối với vấn đề của bạn: DOM không biết liệu một thẻ cụ thể có được hiển thị hay không.
Tốt nhất là chỉ để kiểm tra thủ công:
var allowChildren = function(elem) {
return ! (elem.nodeName in { INPUT : true, IMG : true }) ;
};
Tôi chưa bao giờ thấy rằng cú pháp boolean. Nó có hợp lệ không? Vì vậy, tôi cho rằng tôi có thể tra cứu spec cho các phần tử void, và thêm nó vào hash đó. – demersus
Tôi nghĩ rằng việc tạo ra một bảng các yếu tố void sẽ là giải pháp thực sự duy nhất. Mặc dù tôi cho rằng bạn có nghĩa là 'return! {Input: true, img: true} [elem.nodeName]' –
http://jsfiddle.net/mblase75/eGyRH/3/ - Chrome cho phép tôi thêm một phần tử con vào một ' 'thẻ, ngay cả khi thẻ không được hiển thị. Nó hiển thị trong trình gỡ rối DOM, không có trong cửa sổ trình duyệt. – Blazemonger
http://jsfiddle.net/mblase75/eGyRH/3/ - Chrome cho phép tôi thêm phần tử con vào thẻ <input>
, mặc dù thẻ không được hiển thị. Nó hiển thị trong trình gỡ rối DOM, không có trong cửa sổ trình duyệt.
Tuy nhiên, tôi có thể kiểm tra nó .width()
và xem đó là bằng không hay không: http://jsfiddle.net/mblase75/eGyRH/4/
alert($('.element').append('<span>asdf</span>').children().width());
Tuy nhiên, đây cũng sẽ là zero chiều rộng nếu, ví dụ, tôi thêm khoảng một ẩn div: http://jsfiddle.net/mblase75/eGyRH/5/ - vì vậy nó không hoàn toàn đáng tin cậy.
Câu trả lời được chấp nhận có một fuction rất đẹp dựa trên which types of nodes can be void. Nó có thể được thay thế bằng một jQuery one-liner:
node.is("area,base,br,col,command,embed,hr,img,input,keygen,link,meta,param,source,track,wbr")
- 1. Bạn có thể thêm thuộc tính của riêng mình vào các phần tử HTML không?
- 2. Làm cách nào để phát hiện xem có bất kỳ phần tử con nào trong phần tử cha có một lớp nhất định không?
- 3. Phát hiện xem phần tử Video HTML5 có đang phát
- 4. Không thể tìm thấy các phần tử HTML được thêm động bằng cách sử dụng jQuery
- 5. Làm cách nào để thêm con vào nút tại vị trí cụ thể?
- 6. Selenium C# Webdriver Cách phát hiện xem phần tử có hiển thị hay không
- 7. Có thể thay thế nút asp: bằng phần tử HTML
- 8. Phát hiện xem phần tử có hiển thị hay không (không sử dụng jquery)
- 9. Làm cách nào để biết phần tử <video> hiện có đang phát không?
- 10. Làm cách nào để thêm các phần tử vào ProgramElementCollection?
- 11. Làm cách nào để phát hiện id phần tử hiện tại trong jQuery?
- 12. Trong SimpleXML, làm thế nào tôi có thể thêm một SimpleXMLElement hiện có làm phần tử con?
- 13. DOM: Cách phát hiện một phần tử con mới?
- 14. Làm cách nào để phát hiện các phần tử chồng chéo (chồng lên) bằng JavaScript?
- 15. Cách phát hiện xem trang HTML có chứa video không?
- 16. Yếu tố HTML nào không thể chứa các nút con?
- 17. Có cách nào để tạo phần tử HTML của riêng bạn không?
- 18. Làm cách nào để nối thêm một loạt các nút con vào nút cha trong một thao tác bằng JavaScript?
- 19. Làm cách nào để chọn các nút KHÔNG có nút con cụ thể?
- 20. Làm cách nào để phát hiện xem IDE Delphi cụ thể có đang chạy không?
- 21. Bạn có thể có thêm $ prepend mongo thay vì nối thêm không?
- 22. jQuery: Làm thế nào tôi có thể phát hiện nếu html đã thay đổi trong một phần tử đã cho?
- 23. Có thể ngăn chặn việc bao bọc các phần tử con trong HTML không?
- 24. Selenium: Cách bấm vào phần tử nút HTML?
- 25. Nối mã HTML vào phần Dao cạo hiện có
- 26. Làm cách nào để bạn có thể tách danh sách thành từng phần tử x và thêm các phần tử x đó vào danh sách mới?
- 27. WPF - Làm thế nào để phát hiện khi các thành phần Visual con mới được thêm vào?
- 28. jquery nối thêm phần tử cuối cùng
- 29. Thêm các phần tử vào máy phát điện trăn
- 30. jQuery: làm cách nào để nối thêm $ (this)
indexOf không phải là trình duyệt chéo cho các mảng: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf – Joe
Sử dụng _.indexOf nếu bạn hỗ trợ IE8 và cũ hơn – jasssonpet
Tốt. Có thể đáng giá thêm ''# text'' chỉ trong trường hợp một nút văn bản tìm đường vào. –