সিএসএস সিউডো-এলিমেন্টগুলি যেমন: jQuery ব্যবহার করার পরে :: এবং আগে :: হিসাবে সিলেক্ট এবং ম্যানিপুলেট করা ip


943

JQuery ব্যবহার করে সিএসএস সিউডো-এলিমেন্টগুলি ::beforeএবং ::after(এবং একটি অর্ধ-কোলন সহ পুরানো সংস্করণ) নির্বাচন / পরিচালনা করার কোনও উপায় আছে কি ?

উদাহরণস্বরূপ, আমার স্টাইলশিটে নিম্নলিখিত নিয়ম রয়েছে:

.span::after{ content:'foo' }

আমি কীভাবে jQuery ব্যবহার করে 'foo' কে 'বার' এ পরিবর্তন করতে পারি?


4
আমি এমন কিছু তৈরি করেছি যা আপনার পক্ষে কাজ করা উচিত: gist.github.com/yckart/5563717
yckart

1
স্ট্যাকওভারফ্লোতে আমি এমন মন্তব্যগুলি ঘৃণা করি যা আমি লিখতে চলেছি (যেখানে মন্তব্যকারী জিজ্ঞাসা করে আপনি এটি কেন সম্পূর্ণ বিপরীত উপায়ে করেন না? ) তবে: কিছু সময় কোডের নকশা সমস্যাটি উপলব্ধি করা উচিত এবং সেই সিউডো উপাদানটি একটি প্রতিস্থাপনের সাথে প্রতিস্থাপন করা উচিত স্প্যান বা কিছু। আমি অনুমান করছি আপনি কী জানেন আমি কী নির্দেশ করছি।
zsitro

1
গৃহীত উত্তরটি দুর্দান্ত। যদিও আপনি নীচের যে কোনও পয়েন্ট অর্জনের চেষ্টা করছেন, উত্তরটি কাজ করবে না: ১. স্টাইল পরিবর্তন করুন: আগে জেএস দ্বারা। ২. এর বিষয়বস্তু পরিবর্তন করুন: এর আগে জেএস দ্বারা আপনার যদি প্রয়োজন হয় তবে দয়া করে আমার উত্তরটি দেখুন।
শিক্ষার্থী


: @Learner এখন সেখানে এই সব tfor একটি উত্তর stackoverflow.com/a/49618941/8620333
Temani আফিফ

উত্তর:


694

আপনি কোনও ডেটা অ্যাট্রিবিউট দিয়ে সিউডো এলিমেন্টে সামগ্রীটি পাস করতে পারেন এবং তারপরে জালিয়াতি করতে jQuery ব্যবহার করতে পারেন:

এইচটিএমএলে:

<span>foo</span>

JQuery এ:

$('span').hover(function(){
    $(this).attr('data-content','bar');
});

সিএসএসে:

span:after {
    content: attr(data-content) ' any other text you may want';
}

আপনি যদি 'অন্যান্য পাঠ্য' প্রদর্শিত না হওয়া বন্ধ করতে চান, তবে আপনি এটির মতো সিউকোলেগা সমাধান সহ একত্রিত করতে পারেন:

এইচটিএমএলে:

<span>foo</span>

JQuery এ:

$('span').hover(function(){
    $(this).addClass('change').attr('data-content','bar');
});

সিএসএসে:

span.change:after {
    content: attr(data-content) ' any other text you may want';
}

2
সম্পত্তির attrবিপরীতে function ফাংশনটি ব্যবহার করার জন্য আপনার কি অনুমানের কোনও লিঙ্ক আছে content? আমি অবাক হয়েছি আমি এর আগে কখনও শুনিনি ...
কেভিন পেনো

95
+1 এর জন্য attr(), খুব খারাপ আমি এটির চেয়ে অন্য বৈশিষ্ট্যগুলির সাথে এটি ব্যবহার করতে পারিনি contentডেমো
মাকসিম ভি।

28
এটি কারণ যে কোনও ব্রাউজার অস্তিত্বে attr()এখনও সিএসএস 2 এর বাইরে কার্যকর করেনি, যদিও সিএসএস 2 attr()এ কেবল নিজের contentসম্পত্তি হিসাবে সংজ্ঞায়িত করা হয়েছে ।
BoltClock

10
বৈশিষ্ট্য রেফারেন্সের জন্য আপডেট লিঙ্ক: w3.org/TR/css3-values/#attr- নোটেশন


477

আপনি ভাবেন যে জিক্যুয়ারি যা করতে পারে তার সমস্ত কিছুর সাথে উত্তর দেওয়ার জন্য এটি একটি সাধারণ প্রশ্ন হবে। দুর্ভাগ্যক্রমে, সমস্যাটি একটি প্রযুক্তিগত সমস্যাটিতে নেমে আসে: সিএসএস: পরে এবং: নিয়মের আগে ডিওমের অংশ নয়, এবং তাই jQuery এর DOM পদ্ধতি ব্যবহার করে পরিবর্তন করা যায় না।

সেখানে হয় এই জাভাস্ক্রিপ্ট এবং / অথবা সিএসএস সমাধান নীচে উপস্থিত ব্যবহার উপাদান নিপূণভাবে করার উপায়; আপনি কোনটি ব্যবহার করেন তা আপনার সঠিক প্রয়োজনীয়তার উপর নির্ভর করে।


আমি যেটি "সেরা" পদ্ধতির জন্য ব্যাপকভাবে বিবেচিত তা দিয়েই আমি শুরু করতে যাচ্ছি:

1) একটি পূর্বনির্ধারিত শ্রেণি যুক্ত / সরান

এই পদ্ধতির ক্ষেত্রে, আপনি ইতিমধ্যে আলাদা :afterবা :beforeস্টাইল সহ আপনার সিএসএসে একটি ক্লাস তৈরি করেছেন । এটি "ওভাররাইড হয়েছে" তা নিশ্চিত করার জন্য আপনার স্টাইলশিটে পরে এই "নতুন" শ্রেণি স্থাপন করুন:

p:before {
    content: "foo";
}
p.special:before {
    content: "bar";
}

তারপরে আপনি jQuery (বা ভ্যানিলা জাভাস্ক্রিপ্ট) ব্যবহার করে সহজেই এই শ্রেণিটি যুক্ত বা সরিয়ে ফেলতে পারেন:

$('p').on('click', function() {
    $(this).toggleClass('special');
});

  • পেশাদাররা: jQuery দিয়ে কার্যকর করা সহজ; একসাথে একাধিক শৈলীর দ্রুত পরিবর্তন করে; উদ্বেগের বিচ্ছেদ কার্যকর করে (আপনার এইচটিএমএল থেকে আপনার সিএসএস এবং জেএসকে বিচ্ছিন্ন করে)
  • কনস: সিএসএস পূর্ব-লিখিত হতে হবে, বিষয়বস্তুর তাই :beforeবা :afterসম্পূর্ণরূপে গতিশীল নয়

2) ডকুমেন্টের স্টাইলশিটে সরাসরি নতুন শৈলী যুক্ত করুন

সরাসরি ডকুমেন্ট স্টাইলশিটে স্টাইল :afterএবং :beforeস্টাইল সহ স্টাইল যুক্ত করতে জাভাস্ক্রিপ্ট ব্যবহার করা সম্ভব । jQuery একটি সুবিধাজনক শর্টকাট সরবরাহ করে না, তবে ভাগ্যক্রমে জেএস এতটা জটিল নয়:

var str = "bar";
document.styleSheets[0].addRule('p.special:before','content: "'+str+'";');

.addRule()এবং সম্পর্কিত .insertRule()পদ্ধতিগুলি আজ মোটামুটি ভালভাবে সমর্থিত।

একটি প্রকরণ হিসাবে, আপনি ডকুমেন্টটিতে সম্পূর্ণ নতুন স্টাইলশিট যুক্ত করতে jQuery ব্যবহার করতে পারেন, তবে প্রয়োজনীয় কোড কোনও ক্লিনার নয়:

var str = "bar";
$('<style>p.special:before{content:"'+str+'"}</style>').appendTo('head');

যদি আমরা মানগুলি কেবলমাত্র যুক্ত না করে "হেরফের" করার কথা বলি তবে আমরা বিদ্যমান বা স্টাইলগুলি ভিন্ন পদ্ধতি ব্যবহার করেও পড়তে:after:before পারি :

var str = window.getComputedStyle(document.querySelector('p'), ':before') 
           .getPropertyValue('content');

আমরা সামান্য সংক্ষিপ্ত কোডের জন্য jQuery ব্যবহার করার document.querySelector('p')সাথে প্রতিস্থাপন করতে পারি $('p')[0]

  • পেশাদাররা: যে কোনও স্ট্রিং গতিশীলভাবে শৈলীতে sertedোকানো যেতে পারে
  • কনস: মূল শৈলীগুলি পরিবর্তন করা হয় না, কেবল ওভাররাইড করা হয়; পুনরাবৃত্তি (আব) ব্যবহার ডিওএমকে নির্বিচারে বড় করতে পারে

3) একটি ভিন্ন DOM বৈশিষ্ট্য পরিবর্তন করুন

নির্দিষ্ট ডিওএম বৈশিষ্ট্য পড়তে আপনি নিজের সিএসএসেও ব্যবহারattr() করতে পারেন । ( যদি একটি ব্রাউজার সমর্থন করে :before, এটি সমর্থন attr()পাশাপাশি। ) এর সাথে এই মিশ্রন দ্বারা content:কিছু সাবধানে প্রস্তুত সিএসএস, আমরা বিষয়বস্তু (কিন্তু পরিবর্তন করতে পারেন না অন্যান্য বৈশিষ্ট্যাবলী, মার্জিন বা রঙ মত) এর :beforeএবং :afterপরিবর্তনশীল:

p:before {
    content: attr(data-before);
    color: red;
    cursor: pointer;
}

জাতীয়:

$('p').on('click', function () {
    $(this).attr('data-before','bar');
});

সিএসএস সময়ের আগে প্রস্তুত না করতে পারলে এটি দ্বিতীয় কৌশলটির সাথে একত্রিত করা যেতে পারে:

var str = "bar";

document.styleSheets[0].addRule('p:before', 'content: attr(data-before);');

$('p').on('click', function () {
    $(this).attr('data-before', str);
});

  • পেশাদাররা: অন্তহীন অতিরিক্ত শৈলী তৈরি করে না
  • কনস: সিএসএসে attr কেবলমাত্র সামগ্রীর স্ট্রিংগুলিতে প্রয়োগ করা যেতে পারে, ইউআরএল বা আরজিবি রঙ নয়

2
আমি গেসিফিকন মানগুলি (যেমন, তাদের হেক্স মানগুলির মাধ্যমে) :: মধ্যে psedo পরে গতিশীলভাবে সেট করার চেষ্টা করছি। সামগ্রী: উপাদান (যেমন, সামগ্রী: "\ e043";) এটি আমার পক্ষে কাজ করছে বলে মনে হচ্ছে না তাই আমি ধরে নিচ্ছি এটি গ্লাইফিকনগুলির জন্য হেক্স মানগুলির জন্য কাজ করে না?
ব্যবহারকারী2101068

@ user2101068 আপনার নতুন প্রশ্ন হিসাবে পোস্ট করা উচিত। আপনি যে সমস্ত কোড ব্যবহার করছেন তা আমাকে দেখতে হবে।
ব্লেজমোনজার

ব্লেজমোনজার, দ্রুত উত্তরটির জন্য ধন্যবাদ..ভাগ্যক্রমে অনেকটা কোড রয়েছে এবং প্রাসঙ্গিক কোডটি স্নিপ করতে বেশ কিছুটা প্রচেষ্টা লাগবে। আমি ইতিমধ্যে এই কাজটি পেতে 12+ ঘন্টা ব্যয় করেছি এবং এটির কাজটি পাওয়ার জন্য এটি আমার শেষ হাঁফানো প্রচেষ্টা। আমার ক্ষতি কমাতে হবে আমি আশা করছিলাম আপনি সম্ভবত আমার অনুমানটি যাচাই করতে সক্ষম হবেন: উপরের # 3 তে বর্ণিত কৌশলটি ব্যবহার করার সময় হেক্স মানগুলি (কোড স্নিপেটের আগে)। আমি সামগ্রীর উপাদানগুলিতে হেক্স স্ট্রিং canোকাতে পারি তবে এটি গ্লাইফিকন হেক্স মানের জন্য আসল গ্লিকফিকের চেয়ে পাঠ্য প্রদর্শন করে। সব কোড না দেখে ইমপ্রেশন?
ব্যবহারকারী 2101068

1
@ user2101068 হেক্স স্ট্রিং ব্যবহার করবেন না; পরিবর্তে, প্রকৃত ইউনিকোড অক্ষরটি HTML বৈশিষ্ট্যে অনুলিপি করুন এবং আটকান। jsfiddle.net/mblase75/Lcsjkc5y
ব্লেজমোনজার

সমাধান সম্পর্কিত ২ এবং ৩. আসলে আপনি স্টাইলশিটটি (ওভার) বাড়তে বাধা দিতে পারেন যদি আপনি ব্যবহার করেন: ডকুমেন্ট.স্টাইলশীট [0] .সিন্টরুল (নিয়ম, সূচক), তারপরে এই সূচিটি ব্যবহার করার পরে আপনি প্রয়োজন নেই যখন নিয়মগুলি মুছে ফেলতে পারেন: ডকুমেন্ট। স্টাইলশীট [0] .ডিলেটরুল (সূচক)
পিকার্ড

158

যদিও তারা ব্রাউজারগুলি সিএসএসের মাধ্যমে এমনভাবে রেন্ডার করেছে যেন তারা অন্য সত্যিকারের ডিওএম উপাদানগুলির মতো হয় তবে সিউডো-এলিমেন্টগুলি নিজেরাই ডিওমের অংশ নয়, কারণ ছদ্ম-উপাদানগুলি, নামটি থেকে বোঝা যায় যে, আসল উপাদান নয় এবং তাই আপনি পারবেন না তাদের সরাসরি jQuery (অথবা যে কোনও জাভাস্ক্রিপ্ট এপিআই, এমনকি সিলেক্টর এপিআই নয় ) দিয়ে তাদের নির্বাচন এবং পরিচালনা করুন । এই যে কোনো সিউডো-উপাদানের যার শৈলী আপনি একটি স্ক্রিপ্ট পরিবর্তন করার চেষ্টা করছেন ক্ষেত্রে প্রযোজ্য হয় এবং শুধু ::beforeএবং ::after

আপনি কেবল সিএসএসএম (ভাবুন window.getComputedStyle()) এর মাধ্যমে রানটাইম সময়ে সিউডো-এলিমেন্ট স্টাইলগুলি অ্যাক্সেস করতে পারবেন , যা jQuery এর বাইরে নয় .css(), এমন একটি পদ্ধতি যা ছদ্ম-উপাদানগুলিকে সমর্থন করে না।

আপনি এটির চারপাশে অন্যান্য উপায়গুলি সর্বদা খুঁজে পেতে পারেন, উদাহরণস্বরূপ:

  • এক বা একাধিক স্বেচ্ছাসেবী শ্রেণীর সিউডো-উপাদানগুলিতে শৈলী প্রয়োগ করা, তারপরে ক্লাসগুলির মধ্যে টগলিং করা ( দ্রুত উদাহরণের জন্য সিকোলেগার উত্তর দেখুন ) - এটি সরল নির্বাচকদের (যা সিউডো-উপাদানগুলি নয়) ব্যবহার করার কারণে এই মূmatic় উপায় to উপাদান এবং উপাদান রাষ্ট্রগুলির মধ্যে পার্থক্য করুন, যেভাবে তারা ব্যবহারের উদ্দেশ্যে রয়েছে

  • ডকুমেন্ট স্টাইলশীট পরিবর্তন করে যা সিউডো-এলিমেন্টগুলিতে প্রয়োগ করা হচ্ছে সেই স্টাইলগুলি ম্যানিপুলেট করা, যা হ্যাকের চেয়ে অনেক বেশি


78

আপনি jQuery এ ছদ্ম উপাদান নির্বাচন করতে পারবেন না কারণ তারা ডোমের অংশ নয়। তবে আপনি পিতা উপাদানটিতে একটি নির্দিষ্ট শ্রেণি যুক্ত করতে পারেন এবং সিএসএসে এর সিউডো উপাদানগুলি নিয়ন্ত্রণ করতে পারেন।

EXAMPLE টি

JQuery এ:

<script type="text/javascript">
    $('span').addClass('change');
</script>

সিএসএসে:

span.change:after { content: 'bar' }

48

সিউডো-এলিমেন্টটি পরিচালনা করতে আমরা কাস্টম বৈশিষ্ট্যগুলিতে (ওরফে সিএসএস ভেরিয়েবলগুলি) উপর নির্ভর করতে পারি । আমরা নির্দিষ্টকরণে পড়তে পারি যে:

কাস্টম বৈশিষ্ট্যগুলি সাধারণ বৈশিষ্ট্য, তাই এগুলি যে কোনও উপাদান হিসাবে ঘোষণা করা যায়, সাধারণ উত্তরাধিকার এবং ক্যাসকেড বিধি দ্বারা সমাধান করা যায়, @ মিডিয়া এবং অন্যান্য শর্তসাপেক্ষ বিধি দ্বারা শর্তসাপেক্ষে তৈরি করা যায়, এইচটিএমএল এর স্টাইল বৈশিষ্ট্যে ব্যবহার করা যেতে পারে, পড়তে বা সেট করা যায় সিএসএসওএম ইত্যাদি ব্যবহার করে

এটি বিবেচনা করে ধারণাটি হল উপাদানটির মধ্যে থাকা কাস্টম সম্পত্তিটি সংজ্ঞায়িত করা এবং ছদ্ম-উপাদানটি কেবল তার উত্তরাধিকারী হবে; এইভাবে আমরা সহজেই এটি সংশোধন করতে পারি।

1) ইনলাইন শৈলী ব্যবহার :

.box:before {
  content:var(--content,"I am a before element");
  color:var(--color, red);
  font-size:25px;
}
<div class="box"></div>
<div class="box" style="--color:blue;--content:'I am a blue element'"></div>
<div class="box" style="--color:black"></div>
<div class="box" style="--color:#f0f;--content:'another element'"></div>

2) সিএসএস এবং ক্লাস ব্যবহার করে

.box:before {
  content:var(--content,"I am a before element");
  color:var(--color, red);
  font-size:25px;
}

.blue {
  --color:blue;
  --content:'I am a blue element';
}
.black {
  --color:black;
}
<div class="box"></div>
<div class="box black" ></div>
<div class="box blue"></div>

3) জাভাস্ক্রিপ্ট ব্যবহার করে

document.querySelectorAll('.box')[0].style.setProperty("--color", "blue");
document.querySelectorAll('.box')[1].style.setProperty("--content", "'I am another element'");
.box:before {
  content:var(--content,"I am a before element");
  color:var(--color, red);
  font-size:25px;
}
<div class="box"></div>
<div class="box"></div>

4) jQuery ব্যবহার

$('.box').eq(0).css("--color", "blue");
/* the css() function with custom properties works only with a jQuery vesion >= 3.x
   with older version we can use style attribute to set the value. Simply pay
   attention if you already have inline style defined! 
*/
$('.box').eq(1).attr("style","--color:#f0f");
.box:before {
  content:"I am a before element";
  color:var(--color, red);
  font-size:25px;
}
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>


এটি জটিল মানগুলির সাথেও ব্যবহার করা যেতে পারে:

.box {
  --c:"content";
  --b:linear-gradient(red,blue);
  --s:20px;
  --p:0 15px;
}

.box:before {
  content: var(--c);
  background:var(--b);
  color:#fff;
  font-size: calc(2 * var(--s) + 5px);
  padding:var(--p);
}
<div class="box"></div>

আপনি খেয়াল করতে পারেন যে আমি সিনট্যাক্সটি বিবেচনা করছি var(--c,value)যেখানে valueডিফল্ট মান এবং ফলব্যাক মানও বলা হয়।

একই স্পেসিফিকেশন থেকে আমরা পড়তে পারি:

একটি কাস্টম সম্পত্তির মানটি var () ফাংশন সহ অন্য কোনও সম্পত্তির মানতে প্রতিস্থাপিত হতে পারে। ভার () এর বাক্য গঠনটি হ'ল:

var() = var( <custom-property-name> [, <declaration-value> ]? )

ফাংশনটির প্রথম যুক্তিটি প্রতিস্থাপন করা কাস্টম সম্পত্তির নাম। ফাংশনের দ্বিতীয় যুক্তি, যদি সরবরাহ করা হয় তবে একটি ফ্যালব্যাক মান, যা রেফারেন্সযুক্ত কাস্টম সম্পত্তিটি অবৈধ হলে প্রতিস্থাপনের মান হিসাবে ব্যবহৃত হয়

এবং পরে:

কোনও সম্পত্তির মানতে একটি () পরিবর্তন করতে:

  1. যদি var()ফাংশনটির প্রথম যুক্তির দ্বারা কাস্টম সম্পত্তিটি অ্যানিমেশন-কলঙ্কযুক্ত হয়, এবং var()ফাংশনটি অ্যানিমেশন সম্পত্তি বা এর দীর্ঘতর কোনওটিতে ব্যবহৃত হয়, তবে কাস্টম সম্পত্তিটিকে এই অ্যালগরিদমের বাকি অংশের প্রাথমিক মান হিসাবে বিবেচনা করে।
  2. ফাংশনটিতে প্রথম যুক্তি দ্বারা চিহ্নিত কাস্টম সম্পত্তির মান যদি var()প্রাথমিক মান ব্যতীত অন্য কিছু হয় তবে var()সংশ্লিষ্ট কাস্টম সম্পত্তির মান দ্বারা ফাংশনটি প্রতিস্থাপন করুন ।
  3. অন্যথায়, যদি var()ফাংশনটির তার দ্বিতীয় যুক্তি হিসাবে ফ্যালব্যাক মান থাকে তবে ফাংশনটি ফ্যালব্যাক মান var()দ্বারা প্রতিস্থাপন করুন । যদি var()ফ্যালব্যাকে কোনও রেফারেন্স থাকে তবে তাদের পাশাপাশি রাখুন।
  4. অন্যথায়, ফাংশনযুক্ত সম্পত্তি var()গণনা-মান সময়ে অবৈধ।

যদি আমরা কাস্টম সম্পত্তিটি সেট না করি initialবা এটি সেট করি বা এটিতে একটি অবৈধ মান রয়েছে তবে ফলব্যাক মানটি ব্যবহৃত হবে। initialআমরা কোনও কাস্টম সম্পত্তি তার ডিফল্ট মানটিতে পুনরায় সেট করতে চাইলে এর ব্যবহার সহায়ক হতে পারে।

সম্পর্কিত

সিএসএস কাস্টম সম্পত্তি (ওরফে সিএসএস ভেরিয়েবল) এর উত্তরাধিকারী মূল্য কীভাবে সংরক্ষণ করবেন?

বক্স মডেলের জন্য সিএসএস কাস্টম বৈশিষ্ট্য (পরিবর্তনশীল)


দয়া করে মনে রাখবেন যে সিএসএস ভেরিয়েবলগুলি আপনার প্রাসঙ্গিক বিবেচনা করা সমস্ত ব্রাউজারগুলিতে উপলভ্য নয় (যেমন আইই 11): https://caniuse.com/#feat=css-variables


@ অকলতা হ্যাঁ, কোডটির জন্য একটি জিকুয়ের সংস্করণ 3.x প্রয়োজন .. আমি আরও বিশদ এবং jQuery সহ অন্য একটি বিকল্প যুক্ত করেছি;)
তেমনী আফিফ

এটি কীভাবে 11 এ পারফর্ম করবে?
কনসেক্স

1
@ কনেক্সেক্সটি যে কোনও ভাল এবং আধুনিক বৈশিষ্ট্য পছন্দ করে .. এটি সমর্থিত নয় এবং ক্যানিয়াসে
feat=

ওএফসি আমি জানতাম এবং যেহেতু IE 11 এখনও খুব প্রাসঙ্গিক, তাই আপনার উত্তরটির প্রারম্ভিক অংশে আমি সেই অংশের তথ্যটি মিস করেছি।
কনসেক্স

1
এই উত্তরটি সিএসএস ভেরিয়েবলগুলি ব্যবহার করে জাভাস্ক্রিপ্টের সাথে সিউডো-উপাদানগুলি সম্পর্কিত এবং সংশোধন করার গভীরতর টিউটোরিয়াল। আপনার সময় এবং এই অত্যন্ত মূল্যবান কৌশল (গুলি) ভাগ করে নেওয়ার জন্য আপনাকে অনেক ধন্যবাদ।
লেবসিট

37

খ্রিস্টান তার পরামর্শ অনুসারে আপনিও তা করতে পারেন:

$('head').append("<style>.span::after{ content:'bar' }</style>");

2
এখানে একটি আইডি-বৈশিষ্ট্য যুক্ত করা উচিত, যাতে নতুনটি যুক্ত হওয়ার আগে উপাদানটি নির্বাচন করা এবং মোছা যায়। যদি তা না হয় তবে প্রচুর অপ্রয়োজনীয় স্টাইল-নোড আসতে পারে।
কেএস

24

এখানে অ্যাক্সেসের উপায় রয়েছে: শৈলীর বৈশিষ্ট্যগুলির আগে এবং পরে: সিএসএসে সংজ্ঞায়িত:

// Get the color value of .element:before
var color = window.getComputedStyle(
    document.querySelector('.element'), ':before'
).getPropertyValue('color');

// Get the content value of .element:before
var content = window.getComputedStyle(
    document.querySelector('.element'), ':before'
).getPropertyValue('content');

11

আপনি যদি সিএসএসের মাধ্যমে সুডো উপাদানগুলির পূর্বে :: এর আগে বা :: ম্যানিপুলেট করতে চান তবে আপনি এটি করতে পারেন জেএস। নিচে দেখ;

jQuery('head').append('<style id="mystyle" type="text/css"> /* your styles here */ </style>');

<style>উপাদানটির কীভাবে আইডি রয়েছে তা লক্ষ্য করুন , যা আপনি এটি সরাতে ব্যবহার করতে পারেন এবং যদি আপনার স্টাইলটি পরিবর্তনশীল হয় তবে তা আবার যুক্ত করতে পারেন।

এইভাবে, জেএসের সহায়তায় আপনার উপাদানটি সিএসএসের মাধ্যমে ঠিক কীভাবে চান তা স্টাইল।


6

একটি কার্যকরী তবে খুব কার্যকরী নয় হ'ল নতুন বিষয়বস্তু সহ নথিতে একটি বিধি যুক্ত করা এবং এটি একটি শ্রেণীর সাথে উল্লেখ করা। প্রয়োজনীয় কিসের উপর নির্ভর করে বিষয়বস্তুর প্রতিটি মানের জন্য শ্রেণীর জন্য একটি অনন্য আইডি লাগতে পারে।

$("<style type='text/css'>span.id-after:after{content:bar;}</style>").appendTo($("head"));
$('span').addClass('id-after');

5

এইচটিএমএল:

<div class="icon">
  <span class="play">
    ::before
  </span>
</div>

'পূর্বে' তে গণিত শৈলী ছিল content: "VERIFY TO WATCH";

এখানে আমার দুটি লাইনের jQuery, যা এই উপাদানটিকে নির্দিষ্ট করে উল্লেখ করার জন্য একটি অতিরিক্ত শ্রেণি যুক্ত করার এবং তারপরে সুডো-উপাদানটির সামগ্রীর মানকে CSS পরিবর্তন করতে একটি স্টাইল ট্যাগ (একটি গুরুত্বপূর্ণ ট্যাগ সহ) যুক্ত করার ধারণা ব্যবহার করে:

$("span.play:eq(0)").addClass('G');

$('body').append("<style>.G:before{content:'NewText' !important}</style>");


5

সবাইকে ধন্যবাদ! আমি যা চাইছিলাম তা করতে পেরেছি : ডি http://jsfiddle.net/Tfc9j/42/ এখানে একবার দেখুন

আমি একটি বহিরাগত ডিভের অস্বচ্ছতাটি অভ্যন্তরীণ ডিভের অস্বচ্ছতা থেকে আলাদা হতে চেয়েছিলাম এবং এটি ক্লিক করে যেখানেই ক্লিক করা যায়;) ধন্যবাদ!

   $('#ena').on('click', function () {
        $('head').append("<style>#ena:before { opacity:0.3; }</style>");
    });

$('#duop').on('click', function (e) {

        $('head').append("<style>#ena:before { opacity:0.8; }</style>");

     e.stopPropagation(); 
    });

#ena{
    width:300px;
    height:300px;
    border:1px black solid;
    position:relative;
}
#duo{
    opacity:1;
    position:absolute;
    top:50px;
  width:300px;
    height:100px;
      background-color:white;
}
#ena:before {
    content: attr(data-before);
    color: white;
    cursor: pointer;
    position: absolute;
    background-color:red;
    opacity:0.9;
    width:100%;
    height:100%;
}


<div id="ena">
    <div id="duo">
        <p>ena p</p>
        <p id="duop">duoyyyyyyyyyyyyyy p</p>

    </div>   


</div>

চেষ্টা করবেন না append, ব্যবহার htmlসবচেয়ে ভাল প্রতিরোধ
কিংআডার

1
সতর্কতা: এখানে আপনি প্রত্যেকবার এই ক্লিকগুলির মধ্যে একটি হ্যান্ডল করার সময় মাথায় স্টাইল ট্যাগ যুক্ত করছেন। আমি একটি নতুন যুক্ত করার আগে পুরানোটিকে সরিয়ে দেওয়ার একটি উপায় কোড করব।
pupitetris

3

আপনি একটি জাল সম্পত্তি তৈরি করতে পারেন বা একটি বিদ্যমান ব্যবহার করতে পারেন এবং সিউডো-এলিমেন্টের স্টাইলশিটে উত্তরাধিকারী হতে পারেন।

var switched = false;

// Enable color switching
setInterval(function () {
    var color = switched ? 'red' : 'darkred';
    var element = document.getElementById('arrow');
    element.style.backgroundColor = color;
    
    // Managing pseudo-element's css
    // using inheritance.
    element.style.borderLeftColor = color;
    
    switched = !switched;
}, 1000);
.arrow {
    /* SET FICTIONAL PROPERTY */
    border-left-color:red;
    
    background-color:red;
    width:1em;
    height:1em;
    display:inline-block;
    position:relative;
}
.arrow:after {
    border-top:1em solid transparent;
    border-right:1em solid transparent;
    border-bottom:1em solid transparent;
    border-left:1em solid transparent;
    
    /* INHERIT PROPERTY */
    border-left-color:inherit;
    
    content:"";
    width:0;
    height:0;
    position:absolute;
    left:100%;
    top:-50%;
}
<span id="arrow" class="arrow"></span>

দেখে মনে হচ্ছে এটি "সামগ্রী" বৈশিষ্ট্যের জন্য কাজ করে না :(


3

এটি বাস্তব নয় কারণ আমি এটি বাস্তব বিশ্বের ব্যবহারের জন্য লিখিনি, কেবল আপনাকে কী অর্জন করা যায় তার একটি উদাহরণ দিতে।

css = {
before: function(elem,attr){ 

if($("#cust_style") !== undefined){ 
$("body").append("<style> " + elem + ":before {"  + attr +  "} </style>"); 
} else {
 $("#cust_style").remove();
$("body").append("<style> " + elem + ":before {"  + attr +  "} </style>"); 
}

}, after: function(elem,attr){
if($("#cust_style") !== undefined){ 
$("body").append("<style> " + elem + ":after {"  + attr +  "} </style>"); 

} else { $("#cust_style").remove();
$("body").append("<style> " + elem + ":after {"  + attr +  "} </style>"); 
}
}
}

এটি বর্তমানে যুক্ত হয়েছে এমন একটি / বা একটি স্টাইল উপাদান যুক্ত করে যা আপনার প্রয়োজনীয় বৈশিষ্ট্যগুলি অন্তর্ভুক্ত করে যা সিউডো উপাদানটির পরে লক্ষ্য উপাদানটির উপর প্রভাব ফেলবে।

এটি হিসাবে ব্যবহার করা যেতে পারে

css.after("someElement"," content: 'Test'; position: 'absolute'; ") // editing / adding styles to :after

এবং

css.before( ... ); // to affect the before pseudo element.

যেমন: এবং এর আগে: সিউডো উপাদানগুলি ডিওএমের মাধ্যমে সরাসরি অ্যাক্সেসযোগ্য নয় তবে বর্তমানে নির্ধারিতভাবে CSS এর নির্দিষ্ট মানগুলি সম্পাদনা করা সম্ভব নয়।

আমার পথটি একটি উদাহরণ ছিল এবং এটি অনুশীলনের পক্ষে ভাল নয়, আপনি এটিকে নিজের কিছু কৌশল ব্যবহার করে পরিবর্তন করতে পারেন এবং বাস্তব বিশ্বের ব্যবহারের জন্য এটি সঠিক করতে পারেন।

সুতরাং আপনার নিজের পরীক্ষাটি এই এবং অন্যদের সাথে করুন!

শ্রদ্ধা - আদর্শ হেগদে।


3

আমি সবসময় আমার নিজস্ব ব্যবহারের ক্রিয়াকলাপটি যুক্ত করছি যা দেখতে এটির মতো দেখাচ্ছে।

function setPseudoElContent(selector, value) {    
    document.styleSheets[0].addRule(selector, 'content: "' + value + '";');
}

setPseudoElContent('.class::after', 'Hello World!');

বা ES6 বৈশিষ্ট্য ব্যবহার করুন:

const setPseudoElContent = (selector, value) => {    
    document.styleSheets[0].addRule(selector, `content: "${value}";`);
}

setPseudoElContent('.class::after', 'Hello World!');

2

ক্লাস বা অ্যাট্রিবিউট যুক্ত করার সময় যখন আপনি কেবল একটি styleমাথা সংযোজন করতে পারেন

$('head').append('<style>.span:after{ content:'changed content' }</style>')

2

এখানে অনেক উত্তর রয়েছে তবে কোনও উত্তর সিএসএস :beforeবা :afterএমনকি স্বীকৃত উত্তরকেও হেরফের করতে সহায়তা করে না।

এটি করার প্রস্তাব আমি এখানে দিই। ধরা যাক আপনার এইচটিএমএল এর মত:

<div id="something">Test</div>

এবং তারপরে আপনি এটি সেট করছেন: এর আগে সিএসএসে এবং এর মতো ডিজাইনিং করুন:

#something:before{
   content:"1st";
   font-size:20px;
   color:red;
}
#something{
  content:'1st';
}

দয়া করে লক্ষ্য করুন যে আমি contentনিজেই উপাদানটিতে বৈশিষ্ট্যও সেট করেছি যাতে আপনি পরে এটিকে সহজেই বের করতে পারেন। এখন একটি buttonক্লিক রয়েছে যার উপর, আপনি এর রঙটি পরিবর্তন করতে চান: এর আগে সবুজ এবং এর ফন্টের আকার 30px তে পরিণত করতে। আপনি নিম্নলিখিত হিসাবে এটি অর্জন করতে পারেন:

কিছু শ্রেণিতে আপনার প্রয়োজনীয় শৈলীর সাথে একটি সিএসএস সংজ্ঞায়িত করুন .activeS:

.activeS:before{
   color:green !important;
   font-size:30px !important;
 }

এখন আপনি পরিবর্তন করতে পারেন: শৈলীর আগে ক্লাসটি যুক্ত করে: উপাদানটির আগে নিম্নরূপ:

<button id="changeBefore">Change</button>
<script>
    $('#changeBefore').click(function(){
        $('#something').addClass('activeS');
    });
</script>

আপনি যদি কেবল বিষয়বস্তু পেতে চান তবে :beforeএটি করা যেতে পারে:

<button id="getContent">Get Content</button>
<script>
    $('#getContent').click(function(){
        console.log($('#something').css('content'));//will print '1st'
    });
</script>

চূড়ান্তভাবে আপনি যদি :beforejQuery দ্বারা গতিশীল কন্টেন্ট পরিবর্তন করতে চান , আপনি নিম্নলিখিত হিসাবে এটি অর্জন করতে পারেন:

<button id="changeBefore">Change</button>
<script>
    var newValue = '22';//coming from somewhere
    var add = '<style>#something:before{content:"'+newValue+'"!important;}</style>';
    $('#changeBefore').click(function(){
        $('body').append(add);
    });
</script>

উপরের "চেঞ্জবায়োফার" বোতামটি ক্লিক করলে :beforeবিষয়বস্তু #something'22' এ পরিবর্তিত হবে যা একটি গতিশীল মান।

আমি আসা করি এটা সাহায্য করবে


1

আমি সংজ্ঞায়িত ভেরিয়েবল ব্যবহার করেছেন :rootভিতরে CSSপরিবর্তন করতে :after(একই ক্ষেত্রে প্রযোজ্য :before) সিউডো-উপাদান বিশেষ করে পরিবর্তন করতে background-colorএকটি স্টাইল জন্য মান anchorদ্বারা সংজ্ঞায়িত .sliding-middle-out:hover:afterএবং contentঅন্যের জন্য মান anchor( #referenceনিম্নলিখিত) ডেমো জাভাস্ক্রিপ্ট ব্যবহার করে র্যান্ডম রং উত্পন্ন / JQuery:

এইচটিএমএল

<a href="#" id="changeColor" class="sliding-middle-out" title="Generate a random color">Change link color</a>
<span id="log"></span>
<h6>
  <a href="https://stackoverflow.com/a/52360188/2149425" id="reference" class="sliding-middle-out" target="_blank" title="Stack Overflow topic">Reference</a>
</h6>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript" src="https://cdn.rawgit.com/davidmerfield/randomColor/master/randomColor.js"></script>

সিএসএস

:root {
    --anchorsFg: #0DAFA4;
}
a, a:visited, a:focus, a:active {
    text-decoration: none;
    color: var(--anchorsFg);
    outline: 0;
    font-style: italic;

    -webkit-transition: color 250ms ease-in-out;
    -moz-transition: color 250ms ease-in-out;
    -ms-transition: color 250ms ease-in-out;
    -o-transition: color 250ms ease-in-out;
    transition: color 250ms ease-in-out;
}
.sliding-middle-out {
    display: inline-block;
    position: relative;
    padding-bottom: 1px;
}
.sliding-middle-out:after {
    content: '';
    display: block;
    margin: auto;
    height: 1px;
    width: 0px;
    background-color: transparent;

    -webkit-transition: width 250ms ease-in-out, background-color 250ms ease-in-out;
    -moz-transition: width 250ms ease-in-out, background-color 250ms ease-in-out;
    -ms-transition: width 250ms ease-in-out, background-color 250ms ease-in-out;
    -o-transition: width 250ms ease-in-out, background-color 250ms ease-in-out;
    transition: width 250ms ease-in-out, background-color 250ms ease-in-out;
}
.sliding-middle-out:hover:after {
    width: 100%;
    background-color: var(--anchorsFg);
    outline: 0;
}
#reference {
  margin-top: 20px;
}
.sliding-middle-out:before {
  content: attr(data-content);
  display: attr(data-display);
}

জাতীয় / jQuery এর

var anchorsFg = randomColor();
$( ".sliding-middle-out" ).hover(function(){
    $( ":root" ).css({"--anchorsFg" : anchorsFg});
});

$( "#reference" ).hover(
 function(){
    $(this).attr("data-content", "Hello World!").attr("data-display", "block").html("");
 },
 function(){
    $(this).attr("data-content", "Reference").attr("data-display", "inline").html("");
 }
);

সমর্থন attr()ব্যতীত content, সত্যিই খুব কম। আপনি এটির জন্য caniuse.com পরীক্ষা করতে পারেন। :rootএবং সিএসএস-ভেরিয়েবল সমর্থন আরও ভাল, তবে এখনও এটি এত বিস্তৃত নয় কারণ এর পক্ষে সমর্থনটি বেশ নতুন pretty (এটি caniuse.com এ সমর্থনও পরীক্ষা করে দেখুন)
কলাআসিড

1

.css()নির্দিষ্ট উপাদানগুলির জন্য ব্যবহারের মতো সিএসএস-সিউডো বিধি যুক্ত করতে আমি একটি jQuery প্লাগইন তৈরি করেছি ।

  • প্লাগইন কোড এবং পরীক্ষার কেসটি এখানে
  • এখানে সহজ সিএসএস চিত্র পপআপ হিসাবে কেস ব্যবহার করুন

ব্যবহার:

$('body')
  .css({
    backgroundColor: 'white'
  })
  .cssPseudo('after', {
    content: 'attr(title) ", you should try to hover the picture, then click it."',
    position: 'absolute',
    top: 20, left: 20  
  })
  .cssPseudo('hover:after', {
    content: '"Now hover the picture, then click it!"'
  });


0

আপনি এই উদ্দেশ্যে আমার প্লাগইন ব্যবহার করতে পারেন।

jQuery:

(function() {
  $.pseudoElements = {
    length: 0
  };

  var setPseudoElement = function(parameters) {
    if (typeof parameters.argument === 'object' || (parameters.argument !== undefined && parameters.property !== undefined)) {
      for (var element of parameters.elements.get()) {
        if (!element.pseudoElements) element.pseudoElements = {
          styleSheet: null,
          before: {
            index: null,
            properties: null
          },
          after: {
            index: null,
            properties: null
          },
          id: null
        };

        var selector = (function() {
          if (element.pseudoElements.id !== null) {
            if (Number(element.getAttribute('data-pe--id')) !== element.pseudoElements.id) element.setAttribute('data-pe--id', element.pseudoElements.id);
            return '[data-pe--id="' + element.pseudoElements.id + '"]::' + parameters.pseudoElement;
          } else {
            var id = $.pseudoElements.length;
            $.pseudoElements.length++

              element.pseudoElements.id = id;
            element.setAttribute('data-pe--id', id);

            return '[data-pe--id="' + id + '"]::' + parameters.pseudoElement;
          };
        })();

        if (!element.pseudoElements.styleSheet) {
          if (document.styleSheets[0]) {
            element.pseudoElements.styleSheet = document.styleSheets[0];
          } else {
            var styleSheet = document.createElement('style');

            document.head.appendChild(styleSheet);
            element.pseudoElements.styleSheet = styleSheet.sheet;
          };
        };

        if (element.pseudoElements[parameters.pseudoElement].properties && element.pseudoElements[parameters.pseudoElement].index) {
          element.pseudoElements.styleSheet.deleteRule(element.pseudoElements[parameters.pseudoElement].index);
        };

        if (typeof parameters.argument === 'object') {
          parameters.argument = $.extend({}, parameters.argument);

          if (!element.pseudoElements[parameters.pseudoElement].properties && !element.pseudoElements[parameters.pseudoElement].index) {
            var newIndex = element.pseudoElements.styleSheet.rules.length || element.pseudoElements.styleSheet.cssRules.length || element.pseudoElements.styleSheet.length;

            element.pseudoElements[parameters.pseudoElement].index = newIndex;
            element.pseudoElements[parameters.pseudoElement].properties = parameters.argument;
          };

          var properties = '';

          for (var property in parameters.argument) {
            if (typeof parameters.argument[property] === 'function')
              element.pseudoElements[parameters.pseudoElement].properties[property] = parameters.argument[property]();
            else
              element.pseudoElements[parameters.pseudoElement].properties[property] = parameters.argument[property];
          };

          for (var property in element.pseudoElements[parameters.pseudoElement].properties) {
            properties += property + ': ' + element.pseudoElements[parameters.pseudoElement].properties[property] + ' !important; ';
          };

          element.pseudoElements.styleSheet.addRule(selector, properties, element.pseudoElements[parameters.pseudoElement].index);
        } else if (parameters.argument !== undefined && parameters.property !== undefined) {
          if (!element.pseudoElements[parameters.pseudoElement].properties && !element.pseudoElements[parameters.pseudoElement].index) {
            var newIndex = element.pseudoElements.styleSheet.rules.length || element.pseudoElements.styleSheet.cssRules.length || element.pseudoElements.styleSheet.length;

            element.pseudoElements[parameters.pseudoElement].index = newIndex;
            element.pseudoElements[parameters.pseudoElement].properties = {};
          };

          if (typeof parameters.property === 'function')
            element.pseudoElements[parameters.pseudoElement].properties[parameters.argument] = parameters.property();
          else
            element.pseudoElements[parameters.pseudoElement].properties[parameters.argument] = parameters.property;

          var properties = '';

          for (var property in element.pseudoElements[parameters.pseudoElement].properties) {
            properties += property + ': ' + element.pseudoElements[parameters.pseudoElement].properties[property] + ' !important; ';
          };

          element.pseudoElements.styleSheet.addRule(selector, properties, element.pseudoElements[parameters.pseudoElement].index);
        };
      };

      return $(parameters.elements);
    } else if (parameters.argument !== undefined && parameters.property === undefined) {
      var element = $(parameters.elements).get(0);

      var windowStyle = window.getComputedStyle(
        element, '::' + parameters.pseudoElement
      ).getPropertyValue(parameters.argument);

      if (element.pseudoElements) {
        return $(parameters.elements).get(0).pseudoElements[parameters.pseudoElement].properties[parameters.argument] || windowStyle;
      } else {
        return windowStyle || null;
      };
    } else {
      console.error('Invalid values!');
      return false;
    };
  };

  $.fn.cssBefore = function(argument, property) {
    return setPseudoElement({
      elements: this,
      pseudoElement: 'before',
      argument: argument,
      property: property
    });
  };
  $.fn.cssAfter = function(argument, property) {
    return setPseudoElement({
      elements: this,
      pseudoElement: 'after',
      argument: argument,
      property: property
    });
  };
})();

$(function() {
  $('.element').cssBefore('content', '"New before!"');
});
.element {
  width: 480px;
  margin: 0 auto;
  border: 2px solid red;
}

.element::before {
  content: 'Old before!';
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>

<div class="element"></div>

JQuery.css এর সাধারণ ফাংশন হিসাবে মানগুলি নির্দিষ্ট করা উচিত

এছাড়াও, আপনি jQuery.css এর সাধারণ ফাংশনের মতো সিউডো-এলিমেন্ট প্যারামিটারের মানও পেতে পারেন:

console.log( $(element).cssBefore(parameter) );

জাতীয়:


গিটহাব: https://github.com/yuri-spivak/managing-the-properties-of-pseudo-elements/


0

অন্য কেউ পুরো শৈলীর উপাদান দিয়ে মাথার উপাদানটিতে সংযুক্ত হওয়ার বিষয়ে মন্তব্য করেছিলেন এবং এটি আপনি যদি একবারই করেন তবে এটি খারাপ নয় তবে আপনার যদি এটি একবারের বেশি পুনরায় সেট করতে হয় তবে আপনি এক টন শৈলীর উপাদান দিয়ে শেষ করতে পারেন। সুতরাং এটি রোধ করতে আমি একটি আইডি দিয়ে মাথার মধ্যে ফাঁকা শৈলীর উপাদান তৈরি করেছি এবং এর অভ্যন্তরীণ এইচটিএমএলটিকে এভাবে প্রতিস্থাপন করব:

<style id="pseudo"></style>

তারপরে জাভাস্ক্রিপ্টটি দেখতে এমন হবে:

var pseudo = document.getElementById("pseudo");

function setHeight() {
    let height = document.getElementById("container").clientHeight;
    pseudo.innerHTML = `.class:before { height: ${height}px; }`
}

setHeight()

এখন আমার ক্ষেত্রে অন্যটির উচ্চতার উপর ভিত্তি করে পূর্বের উচ্চতা নির্ধারণ করার জন্য আমার এটি দরকার ছিল এবং এটি পুনরায় আকারে পরিবর্তিত হবে তাই এটি ব্যবহার setHeight()করে আমি প্রতিবার উইন্ডোটি পুনরায় আকার দেওয়ার পরে চালাতে পারি এবং এটি <style>সঠিকভাবে প্রতিস্থাপন করবে ।

আশা করি যে একই কাজটি করতে গিয়ে আটকে থাকা কাউকে সহায়তা করবে helps


-1

আপনার কাছে আমার কাছে কিছু আলাদা জিনিস রয়েছে যা সহজ এবং কার্যকর।

    <style> 
    .case-after:after { // set your properties here like eg: 
        color:#3fd309 !important; 
     } 
     .case-before:before { // set your properties here like eg: 
        color:#151715 !important; 
     }
 </style>
  // case for after
    $('#button-id').on('click', function() {
        $(".target-div").toggleClass('case-after');
    });

     // case for before
    $('#button-id').on('click', function() {
        $(".target-div").toggleClass('case-before');
    });
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.