2012-06-15 29 views
6

Có cách nào tốt hơn để viết chức năng sau đây không?có cách nào khác thay thế cho '#' + div_id không?

Có số '#' + div_id có vẻ không đúng với tôi.

function hide_div(div_id) { 
    $('#' + div_id).hide(); 
} 
+0

cho chúng ta thấy làm thế nào bạn đang kêu gọi 'hide_div() ' , hiện tại, đây là cách duy nhất: s –

+0

câu trả lời ngắn gọn. – coolguy

+0

@SiGanteng chức năng này chỉ dành cho mục đích lý thuyết, vì vậy bạn hiểu những gì tôi muốn biết – Filype

Trả lời

4

Câu trả lời ngắn gọn: không. Hơi dài và trả lời hackish hơn: tạo một hàm với một tên dài một chữ mà sẽ đưa ID của phần tử và trả về một getElementById vào nó, sau đó quấn rằng trong jQuery của bạn $(), như vậy:

function i(id) { 
    if (document.getElementById(id)) return document.getElementById(id); 
    else return ""; 
} 

Sau đó:

$(i(id)).doWhatever(); 

Nhưng thành thật, suy nghĩ về nó:

$("#" + id) 
    12345678 

$(i(id)) 
    12345 

đó là ba nhân vật. Nó có đáng không? Ba nhân vật đó có thực sự quan trọng đối với bạn không? Bạn đã tiết kiệm được rất nhiều khi không sử dụng document.getElementById (id) (27 ký tự).

+0

Nếu nó cho điều này, bạn có thể đã viết 'function i (id) {return '#'. (ID); } ', nhưng tôi đoán phương pháp của bạn là hiệu quả hơn :-) –

+0

Vâng, có vẻ tốt, tôi sẽ không bận tâm viết một hàm để xử lý nó. – Filype

+0

Hàm có thể được giảm xuống thành 'return document.getElementById (id)'. – Esailija

0
function hide_div(div_id) { 
    $(div_id).hide(); 
} 

... nơi ...

div_id = '#someId'; 
hide_div(div_id); 
5

Nếu bạn đang bằng cách nào đó trái ngược với nối chuỗi, sau đó bạn có thể làm điều này thay vì:

$(document.getElementById(div_id)).hide(); 

Bạn có thể cũng vượt qua trong bộ chọn đủ điều kiện, như sau:

hide_div("#divId"); 

Nếu bạn muốn làm điều đó trong vani Javascript, bạn có thể làm điều này:

document.getElementById(div_id).style.display = "none"; 
+1

Lưu ý rằng '.show() /. Hide()' nhận thức được phần tử 'display' ban đầu. Vì vậy, khi bạn '.show()' trên bảng '.hide()' d, nó sẽ trở thành '" display: table; "' một lần nữa. Vì vậy, javascript vanilla chỉ tương đương với một số tình huống. – Esailija

+0

Tôi đánh giá cao rằng có rất nhiều cách để làm điều này. Mặc dù trong nguyên mẫu, bạn có thể sử dụng '$ ('footer')', câu hỏi của tôi là một cái gì đó giống như thế này tồn tại trong jQuery. Tôi biết người khác cũng thắc mắc về điều này. Tôi nghĩ rằng nó sẽ là một tính năng jQuery tốt đẹp – Filype

+0

@Filype: '" footer "' sẽ cung cấp cho bạn tất cả các phần tử 'footer' trong khi' "#footer" 'phần tử có id' footer'. Prototype hoạt động theo cùng một cách. – Andreas

2

Một số cách khác:

$(['#', div_id].join('')).hide(); 

$('#'.concat(div_id)).hide(); 

Ngoài ra, @Thomas cảm hứng cho tôi cho giải pháp thay thế này:

Khi bạn gọi hàm của mình, hãy sử dụng:

$.proxy(hide_div, $('#' + div_id)); 

// Then, you can do this: 
function hide_div() { 
    this.hide(); 
} 

Nó có thể cho phép bạn sử dụng lại tốt hơn. Hay không.

+2

... làm thế nào là một sự cải tiến? –

+1

'" # ". Concat (div_id)': D – Esailija

+1

@PeterOlson không phải là cải tiến, chỉ cần một cách khác :-) –

-5

Không, bạn không thể rút ngắn quá mức đó. Một thay thế cho # + div_id sẽ là:

$('[id="'+div_id+'"]') 

Truy vấn này đang làm việc với bộ chọn thuộc tính []. Không ngắn hơn, không sạch, thực sự chậm hơn nhưng một sự thay thế nào

+0

Tôi biết nhưng anh ấy đã yêu cầu thay thế! – TecHunter

0

Tùy thuộc vào trường hợp sử dụng bạn có thể vượt qua các đối tượng thay cho id:

$('#someobject').click(function(){ 
    hideDiv(this); 
}); 
Các vấn đề liên quan