• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:プロパティ宣言をスマートに書くには?)

プロパティ宣言をスマートに書くには?

babu_babooの回答

回答No.4

#1です。 >同じ状況に立った場合にどのように対策 専門家でもないし、どうこう言える立場でもございません。 お役にたてそうもありません。ごめんなさい。 どのような関数をどう定義するかもわからないのですから 答えようがありません。 ただ回答者側のコードを見ていて思うのですが、 個々の要素にイベントを記述する方が、圧倒的に多いようです。 TAG indexなどで記述されたコードを見て勉強している者からすると なんだかなぁ~と思うことが多々あります。(腕は未熟者ですが) csvなんてキーワードがあるくらいなので、規則性のある表?(データ) なのでしょうか? たとえば個別のセルにイベントを貼り付けなくても、 tableにonclickのイベントを1つくっつけておけば、どのセルを クリックしたか調べることはできます。 そこからその列の処理に移れば良しと考えています 自分は、結果をもとめられる立場ではないので、いきなり 数行ですげーことをして仕事に役立てる必要はありません。 むしろ、原理というか基礎というかそのへんを学びたいのです。 自分からは、XPathなんて遠い所にあります。^^; お~キャラが消えていた。 ばぶぅ~。

think49
質問者

お礼

2度にわたるアドバイスありがとうございました。 babu_babooさんはコードを必ず掲載する回答者さんと認識しており、いくつか参考にさせていただいています。

think49
質問者

補足

> 個々の要素にイベントを記述する方が、圧倒的に多いようです。 えっと…、そんなに多いでしょうか? 現時点で8件の回答をしていますが、イベントを定義したコードを掲載したのは qa4928371 のみだと認識しています。 何か勘違いしているのでしょうか…。 ちなみに、qa4928371に関しては質問者さんにわかりやすいようにあえてHTML埋め込み型の書き方をしています。 # 綺麗なコードは書けるにこしたことはないのですが、質問者さんに伝える場合においては必ずしも必要ではないと考えています。 # 質問者さんの知っているレガシーな方法でコードを書いた方が伝わることもありますし、 # 例外処理までしっかり書いた長いコードよりも、シンプルな短いコードの方が伝わりやすいこともあります。ケースバイケースだと思います。 きちんと清書したら、node.onclick = function(){ ... }; でしょうか。 できることならイベントリスナを使いたいところですが、IE未対応なので仕方なく。 addEventListenerをオーバーロードするやり方もあるようですが、イベント実行順に癖があるようなので採用していません。 > csvなんてキーワードがあるくらいなので、規則性のある表?(データ)なのでしょうか? おおざっぱに言ってしまえば、DOMで操作する要素ノードを返すメソッド、と思っていただければイメージできるかと思います。 var xpath = 'p#Test/strong[@title="test"][text()="It is a test."]'; document.body.appendChild($xQuery(xpath)); と var p = document.createElement('p'); p.id='Test'; var strong = document.createElement('strong'); strong.appendChild(document.createTextNode('It is a test.')); strong.title='test'; p.appendChild(strong); document.body.appendChild(p); は等価です。(IDセレクタは本来XPathではないですが、短い記述量が魅力的だったので採用しました) 階層の深い要素ノード、属性の多い要素ノードを短い記述で宣言できるのが最大の特徴です。 csv2array はCSVを2次元配列に変換して返します。 返ってきた配列を操作した上で array2tableNode で要素ノードに変換し、appendChildなどでページに追加することができます。 ちなみに array2tableNode でもXPathを利用していて、無指定だと単純なtableを。 "table#chat\ncaption[text()='簡易チャット']" を指定すると、<table ="Chat">、一行目がth、<caption>簡易チャット</caption> なtable要素ノードを生成します。 onclickですが、現在作成中のコードには全くありません。 基本的にはDOMで操作すればいいと考えており、長くなりがちなコードをライブラリで短くする事を目指しています。 あと2,3機能を実装すれば、公開できる形になる予定です。 おそらく1週間。順調にいけば今夜にでも公開できると思いますので、もし目にとまって魅力的に感じましたらお試しください。

関連するQ&A

  • jQueryの仕組みについて質問です

    お世話になります。現在jQueryのコードを読んでいるのですが、どうしてもわからないところがあります。 jQuery1.11.1の2774行目、jQuery.merge(...)と自分自身を呼び出していますが、これはjQuery中でどのような処理をして実現しているのでしょうか?jQuery.merge = function(){...};としているわけでもないのに呼び出せているのが理解できません。 mergeメソッド自体は、450行目、jQuery.extend内で定義されているようです。 以下簡易化したjQueryです。 var window = this; // ブラウザ以外で実行する場合のみ必要 (function(){ jQuery = window.jQuery = function( selector, context ) { return new jQuery.fn.init( selector, context ); }; jQuery.fn = jQuery.prototype = { hello: function(){ console.log("hello from fn!"); // ここをjQuery.logと書けるようにしたい } }; jQuery.extend = jQuery.fn.extend = function() {}; jQuery.extend({ log: function(msg){ console.log(msg); } }); init = jQuery.fn.init = function( selector, context ) { console.log("Hello"); }; init.prototype = jQuery.fn; // ここをjQuery.logと書けるようにしたい } )(); jQuery().hello();

  • jQueryでString

    jQueryでStringを扱うことはできますか? javscriptですと var str="okwave"; var v_index=str.indexOf("v"); という2行のコードをjQueryで書き換えることは可能ですか? よろしくお願いします。

  • 最後に()が付いていない内側の関数を外から呼ぶ方法

    下記状態の時、obj内容を一切変更することなく、console.log("a")を実行することは出来ない、という理解で合っているでしょうか? ・最後に()演算子がないので、内側のgoo関数を実行することが出来ない ・外側のportalで、内側のgoo関数を呼び出していれば実行できるがその記述もない この場合、gooのvarは全く意味がない? var obj = {  portal : function() {   var goo = function(){    console.log("a");   }  } } var obj = {  portal : function() {   goo = function(){    console.log("a");   }  } } ・obj.portal().goo() … × ・(obj.portal()).goo() … ×

  • js初心者 consoleなどについて

    初心者で恐縮ですが、よろしくお願いします。 jqueryを使用してます。 $(function () { obj = function(attr){ $.get('getFileList.php', {attribute : attr.data.value }, function(data){var array = data;}); }; delete obj; $("#file").on('input', {value:'file'}, obj); }); #fileに入力があったらobjが発動し$.getでphpから値を得て出力するという処理を書いています。 うまくいかないので変数arrayにちゃんと値が入っているか確認しようとしconsole.log(array)としたところjsのソースコードがconsoleにそのまま表示され、console.logを消してみてもまったく変化がなくなってしまいました。(console.log(array)したことが原因なのかは不明です。これを描いたあたりから変化がなくなっていたような気がするので。) やってみたこととしてはキャッシュの削除と.onの呼び出しの前にオブジェクトを削除することです。 ですが、やはりその変更点もconsoleに反映されてません。  初歩的かもしれませんがよろしくお願いします。

    • ベストアンサー
    • AJAX
  • 関数を呼んだら、その中の関数も自動実行される?

    ・関数の実行タイミングが分からないので教えてください ・下記で、どうして引数が渡るのでしょうか? ・portal関数を呼んだら、gooプロパティに無名関数が格納される(?)と思うのですが、=関数実行になるのでしょうか? ・無名関数だから? var obj = {  portal : function( arg ) {   var goo = function(arg){    console.log(arg);   }(arg);  } } obj.portal("あ"); ・自分的には、portal関数を呼んで変数gooに無名関数を格納(?)した後、明示的にgoo();と呼ぶ必要があると思うのですが… ・下記でTypeErrorエラーになるのは、gooプロパティが2回呼ばれるから? ・明示的に呼んだ2回目は引数が渡らないから? var obj = {  portal : function( arg ) {   var goo = function(arg){    console.log(arg);   }(arg);   goo();  } } obj.portal("あ"); //TypeError: undefined is not a function

  • JSONのプロパティ名に変数を使用したい

    JSONのプロパティ名を動的に変更したく、以下のようなコードを書いたのですが エラーでした。 var caption = "test"; var jsonSampl = { caption : "abc" }; (captionではなく、"test"というプロパティ名が欲しいのです。。) 何か方法はありますでしょうか? ※JQueryのコードで以下の"OK"部分を変数で変えたいのです。。 このプロパティがそのまま表示されるので・・。 $("<div>テスト</div>").dialog({ buttons: { "OK": function() { $(this).dialog("close"); $(this).remove(); } } }) よろしくお願いします。

  • 繰り返し処理による宣言の呼び出し

    例えば以下の様なコードの場合 subメソッドで相当な数の宣言呼び出しがされますが、 メモリ等の観点から特にパフォーマンスに影響ないでしょうか? グローバル変数等に変更し避けるべきでしょうか? また let より var の方がパフォーマンスが良いと言う観点もある様ですが、 以下はそのケースに当てはまりますでしょうか? ※動作はWEBブラウザ上を想定しています。 main(); function main(){  for(let i=0; i < 10000; i++){   sub();  } function sub(){  let hoge = new fuga();  // 以下処理 }

  • どういうときにjQueryオブジェクトが返るのか

    jQueryの初心者なのですが、どういうときにjQueryオブジェクトが返るのかよくわかりません。 var sample = $(array) のように右辺がjQueryを使っていたら、左辺にもjQueryオブジェクトが入るのでしょうか?それとも、単純なdom要素が入るのでしょうか? 自分は、前者だと思っているのですが、サンプルコードを色々とみていると、 var sample = $(window); $(sample).each(function(){ }) などのように、$()でまた変数を囲っているものも見受けられます。 果たしてどうなのでしょうか? 以上、よろしくお願い致します。

  • Javascript について質問です

    var tired=true; var bored=false; var nap = function() { if(tired || bored){ console.log("OK"); } else{ console.log("else"); } }; 上記のコードを書いた際、下記の実行結果となり、OKが表示されません。 どなたか原因が分かる方がおりましたら、教えてください。 else

  • このコードは何を使用?

    このサイトOKWaveで使われているコードですが、JQuery以外に何か使われているのでしょうか? 以下のコードです。 var lib = $.fn.okwave.lib; lib.limitDiscription = new lib.limit($('#answer')); var limit_and_show = function(){ lib.limitDiscription.length(4000); lib.limitDiscription.showNumLeft(4000, $('#num_left')); } 天才プログラマーの皆様、よろしくお願いします。