2009-12-04 36 views
11

Có tương đương JQuery với hàm $ find() của ASP.Net Ajax không?

$() != $find() 

Trả lời

2

Không có một 1to1 tương đương nhưng những gì bạn muốn là $ ('chọn')

Kiểm tra các docs trên khác nhau selectors

$find('MyComponent') would be $('#MyComponent') 

$find('MyComponent',div) would be $(div).find('#MyComponent') 
1

Nếu bạn muốn tìm một yếu tố bằng mã ID ASP.NET của nó thay vì ClientID được tạo (ctl00_RealId) thì bạn có thể sử dụng chức năng này. Nó chỉ trông cho các yếu tố đó có một ID kết thúc bằng _{the real ID here}:

var $$ = function (id, context) { 
    var $ = (jQuery) ? jQuery : return ; 
    var el = $("#" + id, context); 
     if (el.length < 1) 
     el = $("[id$=_" + id + "]", context); 
    return el; 
} 

Ví dụ, nói ID của bạn trong mã của bạn là pnlSuccess, nói một bảng điều khiển:

<asp:Panel ID="pnlSuccess" runat="server"></asp:Panel> 

Nhưng trong các mã trả lại nó xuất hiện dưới dạng: ctl00_content_ctl00_pnlSuccess

gọi $$("pnlSuccess") sẽ tìm thấy bảng điều khiển được hiển thị.

+0

điều này có thể rất không đáng tin cậy trong các tình huống UserControl nơi có nhiều điều khiển có thể kết thúc bằng cùng một ID nhưng có tiền tố khác nhau –

+0

Trong trường hợp đó, sử dụng 'ngữ cảnh 'sẽ có ý nghĩa hơn. –

+2

yup. tôi biết điều đó. thực sự tôi đã sử dụng $ ("input [name * = pnlSuccess]) để tìm điều khiển. Điều tôi thực sự muốn là đối tượng $ find() trả về. Có vẻ như đối tượng $ find() trả về trong ASP. Net Ajax khác với đối tượng $() trong Jquery trả về.Tôi chắc chắn nhận thấy điều này khi sử dụng Điều khiển Telerik – pauldomag

1

Tôi chỉ làm như sau, không ồn ào, không ồn ào, thẳng đến điểm.

$('#' + <%=myControl.ClientID%>) 
+0

Giả sử bạn đang ở trên trang mà mã kết xuất của bạn bật, không phải trong tệp JavaScript bên ngoài. –

+2

yup. I biết rằng.thực sự tôi đã sử dụng $ ("input [name * = pnlSuccess]) để tìm điều khiển. Điều tôi thực sự muốn là đối tượng $ find() trả về. Có vẻ như đối tượng $ find() trả về trong ASP. Net Ajax khác với đối tượng $() trong Jquery trả về.Tôi chắc chắn nhận thấy điều này khi sử dụng Telerik Controls – pauldomag

+0

Đó là vì $ find() trả về một phần tử DOM và $() trả về một đối tượng jQuery bao quanh một mảng các phần tử DOM Tuy nhiên, $() chỉ là hữu ích, có lẽ nhiều hơn như vậy –

8

Không có từ $find trả về thành phần AJAX liên quan đến phần tử DIV chứ không phải thành phần DOM. Bạn có thể xây dựng plugin của riêng bạn để tắt phương thức tìm kiếm.

Microsoft đã tạo $find làm cách để liên kết các thành phần ASP.NET AJAX của họ với DOM.

+1

Cuối cùng, ai đó cũng biết sử dụng đúng '$ find()' –

1

Tôi biết đó là thời gian LOOOOOOOONG quá hạn, nhưng tôi nghĩ rằng tôi có loại giải pháp mà bạn đang tìm kiếm. Nếu tôi đúng, bạn đang tìm kiếm một thay thế jQuery $find vì bạn không biết ID của phần tử (trong đó $find không có bộ chọn theo như tôi biết nhưng jQuery tuyệt vời với). Tôi chỉ cần chạy vào vấn đề này bằng cách sử dụng điều khiển Telerik trên một trang SharePoint, vì vậy ID đối tượng của tôi là một số mess dài điên, và kể từ Sharepoint 2010 là trên NET 3.5., Tôi không thể sử dụng một ID tĩnh.

Giải pháp rất đơn giản, nhưng nó đã xếp vào não tôi một thời gian. $find() đang tìm kiếm theo ID, thật may mắn, chúng tôi có thể quay lại dưới dạng chuỗi thông qua jQuery: $("elem").attr("id"). Vì vậy, về cơ bản những gì chúng ta làm là sử dụng jQuery bên trong hàm $find và nó hoạt động. Đây là một mẫu từ dự án của tôi:

var contextMenu = $find($("[id*=mnuContext]").attr("id")); 

Điều này làm việc cho tôi và sẽ giúp tôi rất nhiều với phần còn lại của giải pháp SharePoint của tôi.