2

だから、私は4つのことをするべきいくつかのコードを持っています:

  • すべてのタイトルから「.mp4」拡張子を削除します
  • ビデオカテゴリを変更する
  • すべての動画に同じ説明を入れてください
  • すべての動画に同じキーワードを入れる

注:これはすべて、YouTubeアップロードページで行われます。私はMozillaFirefoxでGreasemonkeyを使用しています。

私はこれを書きましたが、私の質問は、実際のHTMLページのHTMLタイトルを新しいタイトル(Javascript変数)に変更するにはどうすればよいですか?

これは私のコードです:

function remove_mp4()
{
   var title = document.getElementsByName("title").value;
   var new_title = title.replace(title.match(".mp4"), "");
}
function add_description()
{
   var description = document.getElementsByName("description").value;
   var new_description = "Subscribe."
}
function add_keywords()
{
   var keywords = document.getElementsByName("keywords").value;
   var new_keywords = prompt("Enter keywords.", "");
}
function change_category()
{
   var category = document.getElementsByName("category").value;
   var new_category = "<option value="27">Education</option>"
}
remove_mp4();
add_description();
add_keywords();
change_category();

注:JavaScriptコードに誤りがある場合は、お知らせください。

注2:なぜ現在のHTML値を変数に格納したのか疑問に思われる場合は、HTML値を置き換えるためにそれらを使用する必要があると思うからです(間違っている可能性があります)。

4

6 に答える 6

1

すでに多くのことがカバーされていますが、クロスブラウザの互換性を探している場合は、innerTextも必要になる可能性があるため、古いバージョンのIEやさらにはtextContentも必要になる可能性があることを忘れないでください。他の方法を使用して要素のコンテンツを変更します。

ちなみに、innerHTMLは大多数の人から非推奨と見なされていますが、他の人はまだ使用しています。(私はそれを使用するのが良いかどうかについて議論するためにここにいるわけではありませんが、これはあなたがチェックアバウトするためのほんの少しのコメントです)

備考に関しては、編集または追加の目的でより一般的なバージョンを作成することにより、作成する関数の数を最小限に抑えることをお勧めします。たとえば、次のようにすることができます。

/*
*  @param $affectedElements the collection of elements to be changed      
*  @param $attribute here means the attribute to be added to each of those elements
*  @param $attributeValue the value of that attribute
*/
function add($affectedElements, $attribute, $attributeValue){
  for(int i=0; i<$affectedElements.length; i++){
    ($affectedElements[i]).setAttribute($attribute, $attributeValue);
  }
}

グローバル関数を使用して作業を行うと、coceの保守が容易になるだけでなく、DOM内の要素のフェッチを何度も回避できるため、スクリプトの実行が大幅に高速化されます。たとえば、前のコードでは、値を追加する前に特定の要素のセットのDOMをフェッチします。つまり、関数を実行するたびに、DOM全体を調べて要素を取得する必要があります。要素を一度フェッチしてからvarに格納し、それらを追加または変更のみに焦点を当てた関数に渡すだけで、繰り返し実行されるタスクを明らかに回避できます。

最後の関数に関しては、コードはまだ不完全だと思いますが、HTMLOptionのものを操作するための組み込みメソッドを使用することをお勧めします。よく覚えている場合は、プレーンJavaScriptを使用して次のように入力します。

var category = document.getElem.... . options[put-index-here];
//JavaScript also lets you create <option> elements with the Option() constructor

とにかく、私のポイントは、innerHTML fprに依存するのではなく、JavaScriptの利用可能なメソッドを使用して作業を行う方がよいということです。innerHTMLが作業を完了するための最も簡単で最速の方法であることはわかっていますが、すべてを明確にするのに役立つさまざまなセマンティックタグを使用する代わりに、タグのみを使用してHTMLページ全体を作成した場合。

将来の使用の最後のポイントとして、jQueryに興味がある場合は、これにより、CSSセレクターを介して通常のJavaScriptよりもはるかに高度な方法でDOMを操作する別の方法が提供されます。

あなたもこのリンクをチェックすることができます: innerHTMLの代わり

于 2012-08-06T16:08:25.207 に答える
0

申し訳ありませんが、あなたの質問は明確ではありません。あなたが参照しているあなたのHTMLタイトルは正確には何ですか?

変更したい要素の場合は、次を使用してください。

element.setAttribute('title', 'new-title-here');

ウィンドウのタイトル(ブラウザタブに表示)を変更する場合は、次の操作を実行できます。

document.title = "the new title";
于 2012-08-06T15:00:06.310 に答える
0

<title>要素は非表示の要素であり、ウィンドウまたはタブのタイトルに間接的にのみ表示されます。これは、HTMLコード自体ではなく、ウィンドウ/タブのタイトルに表示されているものをすべて変更することを意味します。document.titleプロパティを変更することでこれを行うことができます:

function remove_mp4()
{
  document.title = document.title.replace(title.match(".mp4"), "");
}
于 2012-08-06T15:01:57.040 に答える
0

プロパティから要素を読み取っ.valueたので、それも書き戻す必要があります。

document.getElementsByName("title").value = new_title
于 2012-08-06T15:02:08.947 に答える
0

タイトルと呼ばれる要素のテキストコンテンツの変更を参照している場合は、を使用してみてくださいinnerHTML

 var title = document.getElementsByName("title").value;
 document.getElementsByName("title").innerHTML = title.replace(title.match(".mp4"), "");

ソース:https ://developer.mozilla.org/en-US/docs/DOM/element.innerHTML

于 2012-08-06T15:02:17.620 に答える
0

あなたの質問はタイトルの変更についてのみであり、残りの部分についてではないと思います。nameまた、ドキュメントのタイトルではなく、属性として「タイトル」を持つドキュメント内のすべての要素を変更することを意味していると思います。

その場合、実際にを使用できますdocument.getElementsByName("title")

要素を処理するには、次のname="title"ようにします。

titleElems=document.getElementsByName("title");
for(i=0;i<titleElems.length;i++){
    titleInner=titleElems[i].innerHTML;
    titleElems[i].innerHTML=titleInner.replace(titleInner.match(".mp4"), "");
}

要素にはname="description"、次を使用します:(ページに要素が1つしかない場合、または最初の要素が必要な場合) name="description"

document.getElementsByName("description")[0].value="Subscribe.";

キーワードについてはよくわかりませんでした(現在、目の前にYouTubeページがありません)。したがって、これは、説明と同じようにテキストフィールド/領域であると想定しています。

document.getElementsByName("keywords")[0].value=prompt("Please enter keywords:","");

.value繰り返しになりますが、カテゴリのを設定するだけの質問に基づいて、次のようになります。

document.getElementsByName("description")[0].value="<option value='27'>Education</option>";

ただし、最後の1つでは、に変更したことに注意"27"'27'てください。他の文字と同じように処理されると仮定すると、二重引用符で囲まれた文字列内に二重引用符を入れることはできません:)

これはもう少し役に立ちましたか?:)

于 2012-08-06T15:11:33.927 に答える