drupal投稿のループを表示するためにajaxリクエストを使用しています。JSONレスポンスデータを使用してJSループアイテムに背景画像スタイルを適用する
$(document).ready(function() {
$.ajax({
type:"GET",
url:"https://www.nba.com/pelicans/api/1.1/json/?type=photo_gallery&tags=community&size=4",
success: function(data) {
let galleriesWrapper = document.getElementById("wrapper--community-galleries");
function create(tagName, props) {
return Object.assign(document.createElement(tagName), (props || {}));
}
function ac(p, c) {
if (c) p.appendChild(c);
return p;
}
for (var i=0; i< data.content.length; i++) {
var link = create("a", {
className: "wrapper--single-gallery",
href: data.content[i].url,
style: "background-image:url(" + data.content[i].images.large + ")"
});
var videoTitle = create("div", {
className: "single-gallery--title",
src: data.content[i].title
});
videoTitle.textContent = data.content[i].title;
ac(galleriesWrapper, ac(link, videoTitle));
}
},
dataType: "jsonp",
});
});
私は、投稿の画像を.jsonファイルから取り出して、その特定の項目のCSS背景画像としてループに挿入しています。
これはChromeとFirefoxではすべて正常に動作しますが、IEでは失敗します。
obect.assignを使用してDOM要素を簡単に作成して追加するヘルパ関数 "create"を使用しています。
私はobject.asign polyfillが必要だったので、IEが最初に失敗しました。アイテムが表示されませんでした。
ポリフィル:
if (typeof Object.assign != 'function') {
Object.assign = function(target) {
'use strict';
if (target == null) {
throw new TypeError('Cannot convert undefined or null to object');
}
target = Object(target);
for (var index = 1; index < arguments.length; index++) {
var source = arguments[index];
if (source != null) {
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
}
return target;
};
}
私は私のJSの先頭にこれを追加すると、ループ項目がIEで表示されますが、私は背景画像のスタイルのインラインを注入するために使用していたコードが失敗します(私はajaxリクエストから適切なポストタイトルを持つ項目が表示されますが、背景は空白です)。
EDIT:スタイルプロパティを追加しようとしているようです。 私はこれを使用する場合:
var link = create("a", {
className: "wrapper--single-gallery",
href: data.content[i].url,
style: "background-image:url(" + data.content[i].images.large + ")"
});
リンクはクラス名とHREFを使用して作成されていますが、スタイルプロパティが追加されていません。
jsonのリクエストデータからどのように私がスプライスしたのかと考えて、私はちょうど "color:red"というスタイルを使ってみました。これにより、リンクにスタイルタグを追加しないという同じ結果が得られました。
JS FIDDLE例:https://jsfiddle.net/nolaandy/w3gfawcg/
これは実際にobject.assignと関係がありますか? –
両方のブラウザでJS Fiddleを見た場合、IEの問題です。 IEはobject.asignを使用できないので、私はpolyfillを使用しなければなりませんでした。このコードは他のブラウザでも完全に機能します。これはどんな種類の問題であるか知っていますか? – 4ndy
私に飛びついたことの一つは、あなたが 'create 'に渡したオブジェクトがプロパティを設定しているように見え、styleプロパティの値が属性に入れたものと少し違うことです。しかし、おそらく 'create'は、どのプロパティが渡されたかに基づいて異なる何かをしているかもしれません。 Dunno、あなたの質問に 'create'メソッドが見えず、フィドルが読み込まれていません。 –