jquery.data ()가 Greasemonkey 스크립트에서 작동해야합니까?
-
22-07-2019 - |
문제
Greasemonkey 사용자 스크립트에서 jQuery를 사용하고 있습니다. 배열을 기반으로 선택에 여러 옵션을 추가하려고 노력하고 다음과 같은 jQuery.Data를 사용하여 요소의 해당 객체를 고수하려고합니다.
$.each(some_array, function(item){
// These next 2 statements seem awkward to me and I was also hoping
// a jquery master could show me a slicker way to perhaps
// combine them into something simpler
$('select').append('<option>dummy</option>');
$('select option:last-child').data('obj', item);
});
그런 다음 선택시 객체를 다시 꺼내고 싶습니다.
$('select').change(function(){
var theObj = $('option:selected', this).data('obj');
});
그러나 GreasemonKey 사용자 스크립트에서 TheOBJ는 정의되지 않았습니다. 나는 랩퍼, unsafewindow 등과 함께 원숭이 사업이 진행되고 있다는 것을 알고 있습니다.
해결책 2
나는 그것을 작동시키는 데 필요한 모든 것이 이것입니다.
$.each(some_array, function(item){
$('select').append('<option>dummy</option>');
$('select option:last-child').each(function(index, elem){
$(elem.wrappedJSObject).data('obj', item);
});
});
$('select').change(function(){
var theObj = $('option:selected', this.wrappedJSObject).data('obj');
});
그것은 모두와 관련이 있습니다 xpcnativeWrappers. jQuery 코드에서 어디에 있는지 잘 모르겠습니다.이 래퍼와 함께 작동하지 않는 코드를 사용하고있었습니다 (조금 보였지만 너무 어렵지는 않습니다). 이것은 확실히 큰 보안 문제를 제시하기 때문에 이것을 중요한 것에 넣지 않을 것입니다.
다른 팁
데이터가 SelectBox의 모든 마지막 옵션에만 추가되었지만 페이지에서 첫 번째 선택된 옵션에 대해 검색 되었기 때문에 페이지의 첫 번째 선택 상자의 마지막 옵션이 선택되지 않는 한 TheOBJ는 정의되지 않아야합니다.
스타일 가이드와 마찬가지로 "This"를 더 많이 사용하는 것을 고려해야합니다. 예를 들어
$('select').change(function(){
var theObj = $('select option:selected').data('obj');
});
해야한다:
$('select').change(function(){
var theObj = $('option:selected',this).data('obj');
});
또는
$('select').change(function(){
var theObj = $(this).find('option:selected').data('obj');
});
나는 그 질문을 잘 이해하지 못할 수도 있지만, 나는 답을 쐈다.
배열을 통해 반복 할 수 있으며 그렇게하면 해당 객체를 사용할 수 있습니다. 여기 예입니다
var array_items = [0,1,2,3,4,5];
$.each(array_items, function(item) {
$('select').append('<option>dummy</option>');
$('select option:last-child').data('obj', item);
});
당신의 질문에 "목록"이 무엇인지 정확히 알기가 어렵습니다.