0

我试图让我的 JavaScript 在网页上生成一个选择的 HTML 输入元素。这样做的问题是它没有从该节点获取子节点的值,并且ObjectUnknownHTMLElement在生成我的选择框时导致。

XML

<Salutation restricted="no" type="dropdownBox" tooltip="Select a title for the customer" required="yes" size="6">
    <value>Mr</value>
    <value>Sir</value>
    <value>Mrs</value>
    <value>Miss</value>
    <value>Lord</value>
</Salutation>

jQuery代码

//hack to pretend its html by wrapping divs to make jquery find work on IE7
selection = $("<div>" + xml + "</div>").find("Salutation").children();
//generate a select box
var selectBox = "<select id=\"Salutation\"> ";
for ( var j = 0; j < selection.length; j++)
{
    selectBox += "<option value=\"" + selection[j].v + "\">" + selection[j]
        + "</option>";
}

输出 HTML

<select id="salutation">
    <option value="undefined">[object HTMLUnknownElement]</option>
    <option value="undefined">[object HTMLUnknownElement]</option>
    <option value="undefined">[object HTMLUnknownElement]</option>
    <option value="undefined">[object HTMLUnknownElement]</option>
    <option value="undefined">[object HTMLUnknownElement]</option>
</select>

我想我在 jQuery 中使用 children 方法不能从节点获取值?

4

2 回答 2

2

不要尝试将 XML 包装在<div>. 只是jQuery它:

selection = $(xml).find("Salutation").children();

那么,既然<Salutation>是XML的根节点,就不要尝试了.find()

selection = $(xml).children();

现在您必须使用实际的 jQuery API 方法从每个 XML 元素中获取文本:

$selection = $(xml).children();
var selectBox = '<select id="Salutation">';
$selection.each(function () {
    var value = $(this).text();
    selectBox += '<option value="' + value + '">' + value + '</option>'
});
selectBox += '</select>'

我不知道是什么让您认为这些元素具有永远有效的v属性。selection[j].v

还有更好的方法来构建元素树:

var $selection = $(xml).children();
var $selectBox = $('<select/>', {id: 'Salutation'});
$selectBox.append(
    $selection.map(function() {
        return $('<option/>', { text: $(this).text() });
    }).get()
);

http://jsfiddle.net/mattball/RbEs9


撇开这些不谈,这似乎是一项比 JavaScript 更适合XSLT任务。

于 2013-02-28T15:54:12.790 回答
0

尝试访问您选择的 innerHTML:http: //jsfiddle.net/Kmp7v/

var selectBox = "<select id=\"Salutation\"> ";
            for ( var j = 0; j < selection.length; j++)
            {
                selectBox += "<option value=\"" + selection[j].innerHTML + "\">" + selection[j].innerHTML
                        + "</option>";
            }
于 2013-02-28T16:03:27.630 回答