2011-09-03 82 views
1

我有一个字符串,其值为<select name="id"></select>从一个字符串创建的对象上的jQuery find()

正如我想popupate是选择,我认为做这样的事情,找到选择的,事后popupate它:

$("<select name="id"></select>").find('select').html('<option value="1">Test</option>; 

然而,似乎$("<select name="id"></select>")不匹配任何东西。

我在做什么错?


编辑:好吧,张贴整个代码:

我有一个原型形式的<script type="text/html">元素在里面:

<ul id="advanced_search_fields"></ul> 
<script type="text/html" id="prototype_fields"> 
    <select name="search[__i__][field]" class="field_selector"> 
     <option></option> 
     <option data-type="choice" value="10">Bank</option> 
    </select> 
</script> 

<script type="text/javascript"> 
    var field_config = {"10":{"choices":["Choice 1","Choice 2","Choice 3","Other"]}}; 
</script> 

<script type="text/html" id="prototype_choice"> 
    <select name="search[__i__][value]"></select> 
</script> 

<script type="text/javascript"> 
    var srch_list = $('#advanced_search_fields'); 
    var add = function(){ 
     srch_list.append('<li>' + $('#prototype_fields').html() + '</li>'); 
    }; 
    var change_field = function(){ 
     $(this).parent().find('span.field').remove(); 
     $(this).parent().data('id', $(this).val()); 
     change_field_to_type($(this).val(), $(this).find('option:selected').data('type'), $(this).parent()); 
    }; 
    var change_field_to_type = function(id, type, li){ 
     var prototype = $('#prototype_' + type).html(); 
     var formHtml = ""; 

     switch(type) 
     { 
      case "choice": 
       var select = $(prototype).filter('select'); 

       $(field_config[id]['choices']).each(function(i, val){ 
        select.append(
         $('<option></option>') 
         .attr('value', val) 
         .text(val) 
        ); 
       }); 
       formHtml = prototype; 
      break; 
     } 
     li.append('<span class="field">' + formHtml + '</span>'); 
    }; 

    $('.field_selector').live('change', change_field); 
    add(); 
</script> 

<input type="button" value="+" onclick="add();"> 
+0

Regading您的编辑;在实际使用的代码中找不到原始问题的代码。那么,代码的哪部分是你有问题? – Guffa

回答

3

查找将不会在您的<select name="id"></select>字符串中找到任何内容,因为它正在查找select中的“select”元素标签。看到这个答案的进一步信息 -

Using jQuery to search a string of HTML

你可以尝试这样的事情 -

var html= '<select name="id"></select>'; 
var $select = $('<div></div>').append(html); 
$select.find('select').append('<option value="1">Test</option>'); 
alert($select.html()); 

工作演示 - http://jsfiddle.net/ipr101/U5LPw/

+0

删除'.find('select')'工作。 – phidah

0

你正在创建一个新元素 ,而不是选择一个现有的元素。如果你不那么append该元素的DOM,你不会看到结果。尝试:

$("<select name=\"id\"></select>").appendTo($("body")); 

如果你真的打算选择现有的元素,改变选择:

$("select[name='id']")... 
3

你需要将其追加的东西

$("<select name='id'></select>").append('<option value="1">Test</option>').appendTo("div"); 

这里是小提琴http://jsfiddle.net/hRFYF/5/

2

您正在创建一个新的select元素,你得到的jQuery对象只包含该元素。使用find搜索匹配内部的那个元素,那么自然就不会有匹配。

你并不需要使用find所有的,因为jQuery对象仅包含一个元素:

var sel = $('<select name="id"></select>').html('<option value="1">Test</option>'); 

(另外,你正在使用引号用引号分隔的字符串内,有对于包含该选项的字符串没有匹配的结尾撇号,并且html方法调用没有结束括号。)