0

JavaScriptを取得して、Webページ上に選択された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 に答える