私は100%ではないと言って始めてみましょう私はこれを処理する方法は正しいが、とにかく..
私はファイルからHTMLを文字列に読み込み、その文字列をjqueryオブジェクトの内部に配置しています。
私のHTML(例):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
...
<link href="template.css" rel="stylesheet" type="text/css" />
</head>
<body>
<img src="/images/img.png"/>
...
</body>
</html>
上記はhtmlstrという変数にあります:
var htmlstr = theFunctionThatLoadsMyHTMLString();
$html = $(htmlstr);
さて、HTMLを見て、iframeに入れる前にいくつかの変更を加えようとしています。
これは画像に対して完璧に機能します:
$html.find("img").each(function(){
// do something
});
しかし、私がリンクタグにアクセスしようとすると(css hrefを変更するために)リンクを見つけられません。
$html.find("link").each(function(){
// do something
});
問題をデバッグしようとすると、私はこのコードを書いた:
$html.find("*").each(function(index){
addline(index+": "+this.tagName+"");
});
これは、各要素で見つかったHTMLタグを出力します(addlineはこれを行う関数です)。これは私が得るものです:
0: IMG
1: DIV
2: DIV
....
何らかの理由でBODY内で起動し、ヘッダーを無視しているように見えますか?
私はここで間違って何をしていますか?
Imはうそをつくことはありません。ImはjQueryで$( "code here")がどのように動作するか100%確信していません。
回答:
回答№1は1ここにはブラウザ固有の効果があります。ザ jQueryドキュメント いう
複雑なHTMLを渡すとき、一部のブラウザはDOMを生成しない 提供されるHTMLソースを正確に複製します。前述したように、我々は 渡されたHTMLを解析して挿入するブラウザの.innerHTMLプロパティ それを現在のドキュメントに挿入します。このプロセスでは、一部のブラウザ 特定の要素を除外する
<html>
,<title>
、または<head>
要素。その結果、挿入された要素は代表的ではない可能性があります 渡された元の文字列の
回答№2の場合は0
JSFiddleで問題を再現し、見つかりました配列内の位置を知っていれば、リンクを実際に選択することができます。だから、固定HTMLだとすれば、それを使ってリンクを見つけることができます。しかし、私はそれを見つけるために任意のセレクタを使用することができませんでした。これは変です...
これを使用する予定がある場合は、すべてのブラウザが同じ頭文字を解析しない可能性があるため、クロスブラウザーの問題をテストする必要があります。